DLL-Methode mit Übergabeparametern
-
Nach längerer Pause hab ich mal wieder ein Problem.
Ich hab in meiner Projektmappe ein MFC-DLL-Projekt und ein "normales" MFC-EXE-Projekt
In der DLL habe ich folgende Methode implementiert:
extern "C" AFX_EXT_CLASS IElement* CreateElement() { return new CElement(); } typedef IElement* (CALLBACK* LPFNCreate)();
In meinen Programm hole ich mir nun über
LPFNCreate lpfnCreate = (LPFNCreate ) GetProcAddress(hDLL, "CreateElement");
die Methode... Und führe diese aus...
So weit so gut läuft das auch alles. Nun habe ich aber ein Problem. Wenn ich meine Methode in der DLL um einen Übergabeparameter erweitere:
extern "C" AFX_EXT_CLASS IElement* CreateElement(int iSize) { return new CElement(); } typedef IElement* (CALLBACK* LPFNCreate)(int);
So compiliert der Compiler einwandfrei, beim Ausführen kommt jedoch folgende Meldung:
"Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call. This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention."
Und zwar genau an der Stelle wo ich die Methode
LPFNCreate lpfnCreate = (LPFNCreate ) GetProcAddress(hDLL, "CreateElement"); lpfnCreate(5);
aufrufe. Wieso?! Was ist denn daran falsch...
Danke für eure Hilfe!
-
Dann deklariere die Funktion CreateElement in der DLL auch als CALLBACK!
Vermutlich wird hier _stdcall verwendet!
-
Und wiedermal bin ich dir zu ewigem Dank verpflichtet :)...