C++ DLL in AHK einbinden

  • Hey,


    ich wollte mir ne eigene API schreiben, nun habe ich das Problem, dass ich es nicht schaffe, die .DLL Datei richtig in AHK einzubinden.


    Mein C++ Script:
    main.h:


    main.cpp:


    mein AHK Script:


    Ich bitte um Hilfe.

  • Wozu C++, wenn es sich um eine einfache C Funktion handelt und man keine Klassen braucht?
    Eine exportierte C++ Funktion bekommt einen komplizierten Namen. (Aus der statischen Methode "Kreis(double)" in dem Namespace "TEST" in der Klasse "API" wird "?Kreis@API@TEST@@SANN@Z". Google nach "c++ name mangling", oder "c++ name decoration", sofern das Zustandekommens des Namens von Interesse ist, oder unbedingt C++ Klassen verwendet werden sollen.)


    Verwende einfach extern "C", oder eine export .def Datei und statt statischen Funktionen in Klassen einfache Funktionen, wie man sie auch in C findet.
    In diesem Beispiel bringen Klassen sowieso keinen Vorteil.
    Beispiel main.h:

    Code
    extern "C"
    {
    	namespace TEST {
    		__declspec(dllexport) double API_Kreis(double r); // = __declspec(dllexport) double __cdecl API_Kreis(double r);
    		__declspec(dllexport) int API_Test();
    	}
    }


    Die Quelltext Datei muss ebenfalls entsprechend angepasst werden. (API:: mit API_ ersetzen.)
    Mit Autohotkey kenne ich mich nicht aus, vielleicht gibt es auch eine einfache Einbindung von C++ und dem typischen C++ Klassen-System, denn ohne eine Einbindung in die AHK-Sprache ist der Umgang mit C++ DLLs und Klassen um einiges komplizierter, als es sein muss und exportierte C-Funktionen eine sinnvolle Alternative. Innerhalb der DLL kann man intern immer noch Klassen verwenden.


    Exportierte C Funktionen sollten als __cdecl implementiert werden, um keine namens Dekoration zu erhalten. Da __cdecl, aber meistens die Standard Einstellung ist gehe ich darauf nicht weiter ein.