C++ wrapper DLL für weitere DLL

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • C++ wrapper DLL für weitere DLL

    Das ist eine recht spezifische C++ frage (welche ich eher in einem C++ forum stellen sollte) aber evtl weiss einer von den wenigen C++ experten hier weiter.

    Ich bin gerade dabei eine DLL für GM Studio zu schreiben, welche es ermöglichen soll funktionen einer anderen DLL aufzurufen. (Defakto ein Wrapper für den GM.)

    Nun, ich habe es relativ problemlos geschafft die DLL in einer Konsolenapplikation zum laufen zu bekommen.
    Die Library die ich verwende, besitzt 3 Files die mitgeliefert werden.
    • Ein Header file (.h)
    • Eine .lib Datei
    • die DLL selbst
    Nun, ich verwende Visual C++.
    Das Headerfile habe ich einfach in die "Headerdaten" gepackt, die DLL selbst habe ich in denselben ordner gepackt wo das main.cpp file ist (da die DLL scheinbar von genau diesem Ort aus aufgerufen wird wenn ich es teste) und die .lib Datei wird in den Projekteigenschaften unter "Linker" korrekt referenziert. (Unter "Zusätzliche Bibliotheksverzeichnisse" habe ich den Pfad zur .lib angegeben und unter "Eingabe" habe ich den bibliotheksnamen bei den "Zusätzlichen Abhängigkeiten" eingetragen.)


    Nun, die wrapper DLL kompiliert problemlos. Aber sie crasht beim aufruf über den GMS (die DLL welche von der Wrapper DLL aufgerufen wird befindet sich im selben Verzeichniss). Ich nehme stark an dass da irgendetwas mit den Librarys nicht stimmt (vielleicht werden die innerhalb der DLL nicht korrekt inkludiert?) > Derselbe Code funktioniert als KonsolenApp einfwandfrei.

    Meine Frage an euch: Weiss zufällig jemand von euch was man beim kompilieren einer Wrapper DLL beachten muss?
    Könnte die .lib datei damit etwas zu tun haben? Oder muss ich beim Compiler irgendwo noch spezifizieren dass all die zusätzlichen Informationen auch in die DLL mitengebaut werden sollen? (Bei einer Konsolenapp kann ich mir vorstellen dass diese im Background noch zugriff auf irgendwelche Dateien hat, vor allem beim direkten ausführen in Visual Studio. Bei einer kompilierten DLL welche auch noch durch den GM ausgeführt wird könnte irgendetwas fehlen was dieses problem verursacht...)


    /Edit: Oh... problem gelöst. XD
    Ich habe scheinbar beim definieren der ersten "initialisierungsfunktion'" der DLL im GM (mit external_define) mitangegeben dass diese funktion einen Parameter besitzt.
    Diese Funktion hatte aber keinen Parameter in der DLL entgegengenommen und auch beim external_call() habe ich keinen Parameter übergeben. (external_define wurde also falsch aufgerufen.)

    Das hat in der DLL scheinbar eine Kettenreaktion von Bugs verursacht sodass andere Funktionsaufrufe innerhalb der DLL nicht korrekt funktionierten und es sogar zu crashes kam wenn ich im nachinein eine weitere DLL-Funktion vom GM aus aufgerufen habe.


    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von LEWA ()