Quote:
Originally Posted by omitma
z.b. InitLicenKeys(param1, param2, param3 usw....);
ABER das std::function ist nicht richtig. das erste int ist der rückgabe wert und das 2. der wert des 1. parameters glaube ich. Benutze immer nur das was ich gepostet habe so wie du es anscheinend auch gemacht hast. Wenn du dann das std::function änderst musst du natürlich auch reinterpret_cast anpassen. Musst das halt auf die Funktion anpassen. Ich nutze aber lieber meine Version. Wahrscheinlich aber nur weil ich da weiß wo welcher typ für den 1. parameter hin muss, was ich bei std::function nicht sicher weiß.
|
Du hast Unsinn geposted, die Funktion ist keine __stdcall Funktion. Und es gibt auch keinen Grund, rohe Pointer std::function vorzuziehen.
Den Rückgabetyp kann man auf 32bit auch ohne Probleme als int lassen, mehr passt da sowie nicht ins EAX Register (jaja an die Klugscheißer, ich weiß, dass einer von hundert Compilern für einen Int auch nur 16bit reservieren könnte ;o).
Quote:
Originally Posted by Master674b
Habe es bereits vor deinem Post korrigiert. Ja das hatte ich nicht berücksichtigt, aber std::function macht hier wirklich keinen Sinn, das versteckt dir nur unnötig die Aufrufkonvention. Und die muss man sehr wohl berücksichtigen! std::function hält intern die Funktionssignatur versteckt um den Aufruf tätigen zu können. Ist bei seinem Compiler etwas anderes als __cdecl als Standard-Aufrufkonvention eingetragen, dann gibt es einen Crash weil du mit der Zuweisung ne falsche Signatur übergeben hast.
Siehe:
Code:
std::function<int(int)> InitDecoration = reinterpret_cast<int(*)(int)>(GetProcAddress(hModule, "InitDecoration"));
Das hier würde funktionieren:
Code:
std::function<int(int)> InitDecoration = reinterpret_cast<int (__cdecl*) (int)>(GetProcAddress(hModule, "InitDecoration"));
Der Grund:
Das int (*) (int) wird vom Compiler ergänzt zu:
int (default_call_convention *) (int).
|
Das ist kein Problem von std::function. Wenn du die Calling Convention beim C Funktionspointer weglässt, wird ebenso der Default verwendet.