Funktion in DLL - welche Parameter?
-
Wenn man eine DLL hat, kann man ja mit dumpbin.exe (MS) oder tdump.exe (Borland) die Namen und Ordinalzahlen der exportierten Funktionen feststellen. Wie kommt man aber zu den notwendigen Parametern (Anzahl, Typ / Speicherbedarf auf Stack)? Gibt es da eine Möglichkeit?
Denn dies ist ja wichtig für das Prototyping:
[cpp]
HINSTANCE hLib = LoadLibrary ("GDI32.DLL");
**typedef BOOL (WINAPI *PFN_ELLIPSE) (HDC, int, int, int, int); // wichtig für Funktionen mit Parameter
**PFN_ELLIPSE pfn_Ellipse = (PFN_ELLIPSE) GetProcAddress(hLib, "Ellipse");
//...
pfn_Ellipse (hdc, 60, 50, 160, 90);
//...
FreeLibrary (hLib);[/cpp]
-
Hm, gar nicht
-
Ganz sicher nicht?
-
Unmöglich!
-
Zumindest die Anzahl der Bytes, die auf den Stack kommen
steht doch hinter dem @ (bei dumpbin)
-
..
-
Welchen Parameter muss man anwenden, damit ein @_... ausgegeben wird?
Sowas gibt es nicht. Das, was Du meinst, ist eine interne Eigenschaft des VC. Alle __stdcall-Funktionen werden vom Compiler in dieser Art bearbeitet. Wenn Du von diesen Funktionen Aliase exportierst (das ist der Grund der Def-Files), verschwindet das. BTW: Der Borland z.B. macht das wieder ganz anders. Und bei __cdecl-Funktionen fehlt das nachgestellte @ sowieso.
Wenn also das @ nicht sowieso schon hinten angestellt ist, bekommst Du es auch nicht wieder dahin.
-
D.h. also, dass man die Funktionen einer x-beliebigen DLL nur sinnvoll nutzen kann, wenn man Rückgabetyp und Anzahl/Typen der Parameter kennt, sodass man einen sinnvolles Prototyp mittels typedef ... vorgeben kann? Ich habe das bisher auch immer so verstanden, will nur sicher gehen, dass es nicht doch irgendein heißes Tool gibt, das das doch kann.
-
Original erstellt von Erhard Henkes:
D.h. also, dass man die Funktionen einer x-beliebigen DLL nur sinnvoll nutzen kann, wenn man Rückgabetyp und Anzahl/Typen der Parameter kennt, sodass man einen sinnvolles Prototyp mittels typedef ... vorgeben kann?Ja. Oder man disassembliert die dll, und versucht zu erkennen, was für Parameter die Funktion erwartet. Anders gehts i.a. nicht.
-
Danke an alle. Ich wollte nur sicher gehen. Das Thema wird nirgends so richtig tiefgehend beackert, wenn ich nicht irre.