Hi Leute,
ich habe eine Frage zur Speicherverwaltung von Delphi. Ich habe ein C++ Projekt welches eine Delphi7 DLL dynamisch lädt und verwendet. Die exportierte Funktion der DLL reservierte Speicher mit der GetMemory-Funktion und gibt den Pointer zu diesem Speicherblock an das C++ Hauptprogramm zurück. Jedoch habe ich bedenken über Speicherlecks.
Frage 1:
Wenn ich Speicher in einer normalen EXE-Datei reserviere und diesen nicht wieder freigebe, wird der Speicher beim Beenden zwangsweise wieder freigegeben (unschön). Das C++ Hauptprogramm lädt die DLL mit dem Befehl LoadLibrary ein und entfernt sie mit FreeLibrary wieder. Was passiert danach mit dem von der DLL reservierten Speicher?
Wird er wie bei einer normalen EXE "zwangsreleased" und steht dem Hauptprogramm nicht mehr zur Verfügung?
Frage 2:
Kann Speicher der innerhalb der DLL mit GetMemory allokiert wurde im C++ Hauptprogramm mit delete freigegeben werden? Oder bräuchte ich eine extra Funktion in der DLL um den Speicher der von Delphi reserviert wurde auch von Delphi wieder freigeben zu lassen? Wenn ich so eine Funktion brauche, darf die DLL zwischendurch mit FreeLibrary freigegeben werden (1. Dll laden, 2. speicher durch dll reservieren, 3. dll entladen, 4. dll laden, 5. speicher durch dll freigeben, 6. dll entladen)?
Bin für jeden Tipp dankbar
Mit freundlichen Grüßen
Tobi
Moderiert von
Narses: Topic aus Sonstiges (Delphi) verschoben am Fr 01.10.2010 um 22:54