Windows c++ DLL Problem ? (bin Unix Program.)

Hallo,

ich habe mit Windows und C++ folgendes Problem.

Ich habe Basisklasse implementiert. Diese steht in einer lib. Diese lib
linke ich zu einem exe-file. Jetzt moechte ich dynamisch Ableitungen
dieser Klasse laden. Dazu implementiere ich die abgeleitete Klasse in
einer DLL. Diese DLL lade ich mit LoadLibrary.

Jetzt habe ich folgendes Problem. Unter UNIX werden beim dynamischen
laden von shared Libs alle offenen Referenzen aufgeloest. D.h. die
abgeleitete Klasse in der DLL solte die Basisklasse im exe kennen. Unter
Windows scheint das nicht automatisch zu funktionieren.

Eventuell brauche ich ja irgendwelche export oder def files. Ich habe
auch irgendwo gelesen, dass man keine globalen Variablen zwischen DLLs
sharen kann. Z.B. eine Statische Variable in der Basisklasse ist in den
DLLs nicht bekannt.

Ich hoffe die Beschreibung ist einigermassen Verstaendlich. Ich komme
halt aus der UNIX-Welt. Da ist alles etwas einfacher.

Ueber Hilfe wuerde ich mich sehr freuen.

Hallo!

Wenn ich alles richtig verstanden habe, dann hast du in einer statischen Library eine Basisklasse implementiert, die du in dynamischen Libraries ableiten und erweitern willst.

Ich würde das ganze so angehen:

  1. die Basisklasse so implementieren, wie dus bereits hast (in einer LIB Datei)

  2. die LIB-Datei zu jeder DLL hinzulinken und dort die BAsisklasse erweitern

  3. die bereits verfeinerte Klasse in Form der DLL in der Anwendung einbauen

Zum Auflösen der Referenzen in DLLs:
Immer wenn Du eine DLL erstellst, wird gleichzeitig eine LIB-Datei, die als Import-Library bezeichnet wird, erstellt.
Wenn Du diese Datei zu deinem EXE dazulinkst, wird trotzdem die DLL verwendet, aber auch die Referenzen aufgelöst. Natürlich benötigst du dann unbedingt die DLL zum Ausführen des Programmes. Wenn du LoadLibrary verwendest, mußt du mit GetProcAddress die einzelnen Funktionspointer aus der DLL laden. Damit wiederum kannst Du keine Klassen importieren.

Ich will jetzt nicht ins Detail gehen, wenn Du noch was wissen willst, kannst du mir auch gerne Mailen!

lg Max

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]