DLL-Klassensymbole / Destruktor exportieren klappt nicht
-
Hi,
ich habe hier ein Problem mit dem Export von DLL-Symbolen. Folgender Hintergrund:
Ich habe mir eine Klasse "B" geschrieben, die sich von eier übergeordneten Klasse "A" ableitet. "A" gehört zu einem Framework, "A" und "B" implementieren ein GUI-Element. Wenn ich ein Objekt vom Typ B einem Fenster hinzufüge, dann kümmert sich das Framework darum, den Destruktor aufzurufen wenn das Fesnter geschlossen wird.
Und hier beginnt mein Problem: Ist der Code von "B" direkter Teil meines Projektes, so wird der Destruktor von "B" und damit automatisch auch der von "A" aufgerufen - alles funktioniert problemlos.
Packe ich meine Klasse "B" aber mittels eines
class __declspec(dllexport) B { ...in eine externe DLL, so wird zwar der Destruktor von "B" aufgerufen, nicht aber der übergeorndete von A - es gibt neben diversen seltsamen Exceptions ein Speicherleck.
Rufe ich im Destruktor von B knallhart den von A auf, fliegt mir das Programm komplett um die Ohren.
Also wie funktioniert es richtig, wie muss ich den Klassenexport definieren, dass die Vererbungshierarchie erhalten bleibt und speziell für die Destruktoren funktioniert?
-
Mit deiner Frage sind wir erneut im Thema DLL angelangt, wo nicht alles so funktioniert wie man es ohne DLL kennt. Klassen und davon abgeleitete Klassen müssen sowohl der Anwendung als auch der DLL in allen Einzelheiten voll bekannt und bereit zum Zugriff sein. Hier knallt es manchmal, denn DLLs sind keine LIBs, eher eigenständige Prozesse mit gewisser Verknüpfung der Datenbereiche. Die Antwort auf deine Frage interessiert mich auch!
-
So wie es aussieht gibt es keine Lösung für dieses Problem, DLLs können es wohl einfach nicht.
Ich werde den Code für den Windows-Port meiner Applikation halt wieder fest eincompilieren. Auch eine Erklärung, warum Windows-Applikationen um so vieles größer, träger und ressourcenhungringer sind...