Dll mit Codelite



  • Hallo,
    ich verzweifle momentan am Erstellen einer nutzbaren DLL mit Codelite.
    Habe keine Ahnung von Dlls, deshalb hab ich nach Tutorials gesucht, die bezogen
    sich aber entweder auf die WinApi oder Linux.

    Habe meine Test-Dll so aufgebaut:

    test.h

    #ifndef MAIN_H
    #define MAIN_H
    
    __declspec(dllexport) char test();
    
    #endif
    

    test.cpp

    #include "main.h"
    
    __declspec(dllexport) char test()
    {
    	return 'T';
    }
    

    In meinem Testprogramm hab ich dann später, den Header inkludiert, die Bibliothek gelinkt und versucht
    auf test() zuzugreifen doch ich bekam nur ein undefined reference to `test()' 😞 Mein Hauptproblem ist, dass ich bei den diversen Makros in
    den Beispielen nicht durchblicke. Ich hoffe ihr könnt mir etwas Klarheit verschaffen. Nutzen will ich die DLL nachher zusammen mit wxWidgets.

    Vielen Dank im Voraus



  • extern "C" __declspec(dllexport) char test();
    


  • Ich weiß nicht, wo da was mit CodeLite, was ich eh nicht kenne, zu tun hat, aber es ist ja so, dass Du beim Kompilieren der DLL genau das schreiben musst, was Du auch getan hast, beim Nutzen der DLL jedoch dllexport durch dllimport ersetzen musst.

    Das führt dann dazu, dass man sich einfach so was schreibt:

    // Header
    
    #ifdef IMPORT_DLL
    #define DLL_SPECIFIER __declspec(dllimport)
    #else
    #define DLL_SPECIFIER __declspec(dllexport)
    #endif
    
    int DLL_SPECIFIER a(); // genau son cpp-Datei
    

    Nutzt Du dann im Programm, welches das Teil nutzt, den Header, definierst Du vorher (oder einfach fürs ganze Projekt) IMPORT_DLL, sodass automatisch die Umwandlung in dllimport geschieht.



  • Müsste das

    int DLL_SPECIFIER a()
    

    dann nicht

    extern "C" DLL_SPECIFIER int a()
    

    heißen?



  • Mache ich nie so, außer ich will Funktionen so exportieren, dass sie auch in Excel oder so laufen. Will ich aber in der Regel nicht. Eine Erläuterung Ethons, warum er das extern "C" eingeführt hat, wäre hilfreich gewesen.



  • Habe für einen Moment fälschlich angenommen dass das Name-Mangling für den Linkerfehler verantwortlich ist.
    Wird auch ohne extern "C" funktionieren.



  • Vielen Dank für die Hilfe. 🙂 Der Linkerfehler wurde versucht, da Codelite
    nicht den Pfad der Bibliothek zuordnen konnte. Jetzt klappt's. 😃


Anmelden zum Antworten