DLL und stdcall



  • Hi,

    ich stehe gerade vor einem kleineren Problem. Ich habe eine Delphi anwendung und diese soll eine C++ DLL einbinden.

    Das Delphi Programm ist dabei "konstant" die DLL mit C++ schreibe ich selber.

    Das Delphiprogramm importiert eine function mit folgendem prototype:

    function Add(a: Integer; b: Integer): Integer; stdcall;
    

    Dazu habe ich nun folgenden C/C++ Code zur umsetzung der DLL geschrieben.

    Testclass.h

    #ifndef TESTCLASS_H_
    #define TESTCLASS_H_
    
        extern "C" __declspec(dllexport) __stdcall int Add(int a, int b);
    
    #endif /* TESTCLASS_H_ */
    

    Testclass.c

    #include "TestClass.h"
    
    using namespace std;
    
    int Add(int a, int b) {
        return a + b;
    }
    

    Die dll soweit auch erzeugt. Wenn ich mir mit einem dll ExportViewer die Dll ansehe, dann wird folgender Funktionsname exportiert: Add@8

    Versucht das Delphi Programm nun die Dll zu laden kommt ine Fehlermeldung laut der der Einsprungspunkt "Add" in der Dll nicht gefunden werden konnte.

    Wodurch kommt das @8 im Funktionsnamen zustande ?

    Ich hatte zum testen selbst noch ein kleines Delphi Programm geschrieben um die Dll zu testen. Dort bekomme ich den selben Fehler. Ich vermute es hängt mit dem stdcall zusammen.

    Setze ich sowohl im dll code als auch im Delphicode cdecl als Aufrufkonvention funktioniert es ohne Probleme.

    Allerdings kann ich die Aufrufkonvention im eigenntlichen Delphiprogramm nicht ändern dort ist sie fest auf stdcall.

    Wie kann ich das problem lösen, damit auch die stdcall Variante funktioniert ?

    Gruß und Dank





  • DllCoder schrieb:

    Wie kann ich das problem lösen, damit auch die stdcall Variante funktioniert ?

    .def-File mit EXPORTS-Statement.

    Aja, du plenkst.


Log in to reply