![]() |
Delphi-Version: 5
Event beim Entladen einer DLL?
Hallo,
in einer DLL werden einige TStringList beim Abarbeiten von DLL-Funktionen global erzeugt (z.B. ein Errorlog) welches dann nach Abarbeitung ausgelesen werden soll. ReportMemoryLeaksOnShutdown bemeckert eben genau diese TStringLists nur fehlt mir irgendwie der Ansatz, wie ich diese wieder zerstören kann? Die DLL wird statisch geladen, mehrere Funktionen daraus aufgerufen, dann ggf. das Errorlog gelesen und dann das Programm beendet. Ciao Stefan |
AW: Event beim Entladen einer DLL?
Wie werden die denn global erzeugt?
In einen initialization-Abschnitt? Hast du probiert, diese in einen finalization-Abschnitt freizugeben? |
AW: Event beim Entladen einer DLL?
Nein, die Erzeugung passiert momentan im DLL-Procedure-Aufruf ala
Delphi-Quellcode:
danke für den Tip mit dem initialization-Abschnitt, aber wie geht das in einer DLL?if ErrorLog = Nil then ErrorLog := TStringList.Create else ErrorLog.Clear; Ciao Stefan |
AW: Event beim Entladen einer DLL?
Zitat:
|
AW: Event beim Entladen einer DLL?
Initialize und Finalize der Units funktionieren sowohl in EXE , als auch DLL.
Ebenso Class-Contructor und Class-Destructor. BEGIN in der DPR (EXE/DLL) entspricht der InitProc/DLLMain, also in etwa dem letzten Initialize (nach allen Units) Es gibt auch noch eine ExitProc, aber die ist in Delphi nicht so schön nutzbar. ( ![]() |
AW: Event beim Entladen einer DLL?
Alternativ kann man auch noch die
Delphi-Quellcode:
austauschen:
DllMain
Delphi-Quellcode:
In deinem Falle sollte
var
DLLProcNext: procedure(Reason: Integer); procedure DLLMain(Reason: Integer); begin case Reason of DLL_PROCESS_ATTACH: ; DLL_THREAD_ATTACH : ; DLL_THREAD_DETACH : ; DLL_PROCESS_DETACH: ; end; if Assigned(DLLProcNext) then DLLProcNext(Reason); end; begin DLLProcNext := TInterlocked.Exchange(@DLLProc, @DLLMain); DLLMain(DLL_PROCESS_ATTACH); end.
Delphi-Quellcode:
aber ausreichend sein.
finalization
|
AW: Event beim Entladen einer DLL?
Danke für all die Hinweise, jetzt tut die DLL was sie soll (zumindest fast) denn ich bekomme immer noch ein kleines Memoryleak:
21 - 28 bytes : TMBSEncoding x 1 Wo zum Teufel kommt das her? Ciao Stefan |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:08 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz