classen dynamisch aus dlls laden



  • Hallo
    ich habe eine Klasse in einer DLL also

    class __declspec(dllexport) Xxxx
    

    kann ich diese klasse dynamisch mittels LoadLibrary(), also ohne eine lib datei in das projekt hinzufügen zu müssen, laden ?

    hoff bin im richtigem forum, oder muss ich das im winapi forum posten ?
    thx schonmal



  • Sorry, hier stand Quatsch - Frage im ersten Anlauf nicht verstanden...



  • thx aber da steht auch nur statisches laden ( also mit der .lib )
    ich will ja nur aus der .dll "direkt" die klasse laden
    geht das den nicht besser als eine funktion zu exportieren, die dann zugriff auf die klasse ermöglicht ?
    also

    __export MyClass* getMyClass();
    

    mit dieser methode kann man doch nur eine einzige instanz der klasse erstellen.
    es seih den man läd die dll 100 mal, dann kann man 100 instanzen erstellen oder ?
    oder man macht:

    map<string, MyClass*) MapKlassen;
    static MapKlassen mapKlassen;
    __export MyClass* getKlasse(string name);
    

    dann kann man mehrere instanzen der klasse verwalten

    aber gibts keine bessere möglichkeit ?



  • scheinst es gesehen zu haben, bevor ich es löschen konnte... Da wird aber beides beschrieben dynamisch und statisch! Bin mir aber nicht sicher, ob dynamisch + class überhaupt funktioniert, da MS keinen Export von Klassen in den DLLs zuläßt und das nur in Borland DLLs möglich ist und dynamisches Laden über die WinAPI gemacht wird.



  • was heist MS lässt kein export von klassen zu ? also Visual C++ ?
    __export ist das Borland C++ oder ANSI ?



  • ja stimmt das tutorial hat auch dynamisches laden.

    ich hab das auch jetzt soweit das ich die klasse dynamisch lade,
    aber
    aus irgendeinem grund meldet CodeGuard ein Resource Leak
    size: 1328 bytes
    wenn ich aber die klasse statisch lade, dann wird alles richtig freigegeben
    ich mach folgendes:

    hLib = LoadLibrary("mylib.dll");
        GetMyClass create = (GetMyClass)GetProcAddress(hLib, "create");
        klasse = create();
    

    im destruktor des programmes dann:

    delete klasse;
        FreeLibrary(hLib);
    

    ich versteh net was so gros ist, 1328 bytes
    wenn ich sizeof(MyClass) mache dann kommt ca. 100 bytes raus, und ich habe keine zeiger auf variablen



  • weiß ich leider nicht, aber hast Du mal versucht die Instanz in der DLL wieder freizugeben?



  • ja hab ich, wie im tutorial hab ich eine release methode eingebaut die dann delete this macht
    eigentlich hab ich alles so wie im tutorial gemacht
    eben komisch, das das nicht passiert wenn ich das ganze statisch mache ( also mit .lib einbinden )


Anmelden zum Antworten