Dll-Funktion hat nach Kompilierung anderen Namen
-
Hallo,
ich gebe mal ein verkürztes Beispiel: Ich habe mit VC++ 6.0 eine leere Win32-Dll Anwendung erstellt:
#include <windows.h> extern "C" __declspec(dllexport) void __stdcall SaySomething(char* str); void __stdcall SaySomething(char* str) { MessageBox(NULL, str, "Msg", MB_OK); } BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { return TRUE; }
Wenn ich nun im Dependency Walker die Dll öffne, heisst die Funktion nicht mehr SaySomething, sondern _SaySomething@4. Ich kann sie auch nur mit diesem namen aufrufen. Kennt jemand das Problem? Ich mache ansonsten nicht viel mit VC++. Wäre nett, wenn mir jemand einen Tipp geben könnte. Die Forensuche hat mir nicht weitergeholfen. Danke schon mal.
Gruß
Barney
-
erstell ne *.def Datei und pack sie bei die "Header"-Dateien.
Die Datei ist so aufgebaut:; DivX4Windows.def : Declares the module parameters for the DLL.
LIBRARY "DivX"
DESCRIPTION 'DivX4Windows Windows Dynamic Link Library'EXPORTS
DriverProc
decore
encore(Das Beispiel ist von der OpenDivX Video4Windows dll)
Also einfach unter EXPORTS die Namen der exportierten Funktionen ohne Parameter etc. auflisten. Dann nochmal kompilieren und schon sollte es passen, wenn Du die Datei in msvc bei die anderen header gepackt hast...
-
Hallo,
danke, hat geklappt
. Kannst du mir bitte noch erklären, warum das so ist? Wäre nett. Noch mal Danke.
Gruß
Barney
-
Das wüsste ich mal gerne
Ich hab das nur selber mal irgendwo so gesehen
-
http://www.c-plusplus.net/forum/viewtopic.php?t=55244
http://www.c-plusplus.net/forum/viewtopic.php?t=14151