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!


  • Mod

    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 :)...


Log in to reply