aus einer *.h und *.lib eine *.dll machen?wrapper?



  • Ich habe eine header datei und die dazugehörige lib.
    Kann mir jemand sagen ob ich daraus eine dll machen kann?
    Also theoretisch müsste ich doch aus h+lib eine dll machen können und diese mittels einer neuen headerdatei dann auch nutzen können.

    leider habe ich was dll erstellung betrifft kaum erfahrung, daher meine frage.



  • Das sollte gehen.
    Du musst dazu allerdings eine von zwei Sachen machen:

    1. Ein .def File mit allen benötigten DLL-Exporte erstellen. Dazu kannst du "dlltool" verwenden:
      dlltool --export-all-symbols --output-def OutputDefFile.def InputLibFile.lib

    Dummerweise sind in dem so generierten .def File dann haufenweise Exporte drinnen die nicht drinnen sein dürfen. Du musst alle Exporte rauswerfen die mit folgenden Strings anfangen (nur der Teil links vor dem "//"):

    ??_7                   // vftable
    ??_C                   // string
    ??_E                   // vector deleting destructor
    ??_F                   // default constructor closure
    ??_G                   // scalar deleting destructor
    ??_H                   // vector constructor iterator
    ??_R                   // RTTI stuff
    _real@                 // float constants?
    _CT??                  // ??? probably has something to do with exception handling?
    

    Und dann noch die Exporte namens "_CTA1H" und "_TI1H" entfernen.

    Dann machst du ein DLL Projekt, bindest da die LIB ein, und gibst das .def File an.
    Dann baust du das und dann hast du deine DLL. Verwendet werden kann die mit dem originalen .h File. Und natürlich mit dem .lib File das beim DLL-Bauen mit rausgefallen ist.

    1. Du kannst natürlich für alle Funktionen/Klassen in der LIB manuell Wrapper-Funktionen bzw. Wrapper-Klassen schreiben, die dann "einfach" nur die entsprechenden Funktionen aus der LIB aufrufen. "Einfach", weil das bei Klassen u.U. gar nicht so easy ist. Und natürlich steigt hier der Aufwand enorm mit dem Umfang der LIB. Für grössere Sachen würde ich definitiv Variante (1) empfehlen.


  • alles klar, super...werd ich versuchen.
    na ich brauch eigentlich nur die dll, weil ich die in einer anderen sprache laden will.
    und dort geht eben keine lib.
    vielen dank, ich versuch mal mein bestes...
    werd es morgen abend mal probieren und werd hier feedback geben, wenn ich irgendwo nicht klarkomme...
    bin eben kein c++ profi...

    p.s. wie geb ich die .def datei an?

    nutze code::blocks, sofern das wichtig wäre zu wissen.


Anmelden zum Antworten