Komplette Klasse aus DLL laden



  • Hallo liebes Forum,

    ich versuche mich derzeit daran, eine DLL eines Herstellers zu laden, die mit Java (warum auch immer) erstellt und mit dem Visual Studio 2005 Compiler gebaut ist (soweit ich die Doku richtig verstanden habe). Ich habe sehr viele Header, zwei .dll- und zwei .lib-Dateien. Ich arbeite jedoch mit Qt und möchte daher weiterhin auf MinGW setzen. Außerdem möchte ich die DLLs zur Laufzeit laden.

    Die Symbole in den DLLs finde ich, die Namen habe ich aus dem zugehörigen Header. Nun existiert eine Wrapper-Klasse in der DLL, die vom Typ WRAPPER_T ist:

    typedef void* WRAPPER_T;
    

    Ich habe auch Zugriff auf eine Create-Funktion:

    #define DLL_API __declspec (dllimport) __cdecl
    #define DLL_FUNC(name, ret, decl) typedef DLL_API ret (*name##_t)decl; static name##_t name = 0;
    DLL_FUNC( Wrapper_Create ,WRAPPER_T,());
    

    Der Return-Type ist WRAPPER_T, so dass ich mir naiv gedacht habe, dass ich damit ein Wrapper-Objekt erzeugen kann:

    WRAPPER_T wrapper = Wrapper_Create();
    

    Leider wird dies sofort mit einem SEGFAULT in der DLL bestraft.

    Nun also die Frage: Was kann ich tun, um eine Instanz dieser Klasse zu erzeugen? Binde ich die Header-Datei ein, beschwert sich der Linker über das Fehlen der Implementierung (klar, die ist ja in der DLL, und die .lib versteht MinGW nicht). Ohne Header und mit händisch aus der DLL gesuchten Funktionen gibt es einen SEGFAULT. Any ideas?

    Vielen Dank schonmal



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x) in das Forum Compiler- und IDE-Forum verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Leider hat sich bisher nicht viel Neues ergeben. Da ich auf die DLL zwingend angewiesen bin, habe ich den Compiler gewechselt und verwende nun MSVC2008.

    Nun kann ich die DLL zwar nicht dynamisch laden, aber ich kann sie immerhin überhaupt verwenden.

    Schade, dass das die einzige Möglichkeit ist - ist sie doch so wenig elegant...

    Vielen Dank an alle, die wenigstens kurz überlegt haben, ob sie mir vielleicht antworten wollen.

    Viele Grüße,
    Tobi


Anmelden zum Antworten