![]() |
Dll-Ausführen von Code bevor sie aus dem Speicher geladen wi
Wie der Titel schon sagt, kann ich, bevor die dll aus dem Speicher geladen oder von mir aus 'beendet' wird, noch Code ausführen, um zB wichtige Daten zu speichern? Problem ist, es geht um eine ISAPI-dll, ich kann also nicht vor dem Beenden des Host-Programmes noch eine Prozedur in der dll ausführen lassen.
|
Re: Dll-Ausführen von Code bevor sie aus dem Speicher gelade
auch net mit dem onclose ereignis der hostanwendung ?
weil da müsste ja das OS drauf warten bis der code abgelaufen ist und da kannste ja der dll noch schnell "in den hintern treten" |
Re: Dll-Ausführen von Code bevor sie aus dem Speicher gelade
Dafür gibt es imho den finalization Abschnitt - ich denke mal der funzt auch in DLL's.
|
Re: Dll-Ausführen von Code bevor sie aus dem Speicher gelade
Zitat:
EDIT: Laut Hilfe ist das sogar speziell für dlls - sollte also klappen. Vielen Dank! Nochmal EDIT: Ist doch nicht für dlls, aber ich habe dadurch in der Hilfe anderen Code gefunden:
Delphi-Quellcode:
library Test;
var SaveExit: Pointer; procedure LibExit; begin ... // library exit code ExitProc := SaveExit; // restore exit procedure chain end; begin ... // library initialization code SaveExit := ExitProc; // save exit procedure chain ExitProc := @LibExit; // install LibExit exit procedure end. |
Re: Dll-Ausführen von Code bevor sie aus dem Speicher gelade
Soweit ich weis, is dies die "Einzig Wahre" Methode:
Delphi-Quellcode:
Deine Methode mag zwar funktionieren, aber diese hier ist dafür prädestiniert *g*
procedure EntryProc(dwReason: DWORD);
begin if (dwReason = DLL_PROCESS_DETACH) then begin end; end; begin DLLProc := @EntryProc; end. siehe ![]() ciao, Philipp |
Re: Dll-Ausführen von Code bevor sie aus dem Speicher gelade
Hi zusammen,
Philipp hat recht. Deshalb hier noch mal von mir ein kleines komplettes Beispiel
Delphi-Quellcode:
Der Finalize-Abschnitt innerhalb einer Unit funktioniert nicht. Dieser Abschnitt gilt generell nur für eine Unit und nicht für eine DLL. Wie und Wann eine Unit geladen oder entladen wird, ist von Delphi abhängig. Vor dem Laden von Units macht Delphi einiges im Hintergrund, was mit der DLL oder auch der Programmdatei selbst nicht viel zu tun hat.
library TestDLL;
uses Windows, SysUtils, Classes, Forms; procedure DLLEntryPoint(dwReason: DWord); begin case dwReason of DLL_PROCESS_ATTACH: InitializeMethode; //die methode muss ich selber schreiben DLL_PROCESS_DETACH: FinalizeMethode; //die methode muss ich selber schreiben end; end; begin {First, assign the procedure to the DLLProc variable.} DllProc := @DLLEntryPoint; {Now invoke the procedure to reflect that the DLL is attaching to the process.} DLLEntryPoint(DLL_PROCESS_ATTACH); end. |
Re: Dll-Ausführen von Code bevor sie aus dem Speicher gelade
Das mit dem finalization-Abschnitt hatte ich ja schon angehangen. Aber ich denke, ich werde meine gepostete Methode verwenden, die gefällt mir da irgendwie besser. Oder spricht was dagegen?
|
Re: Dll-Ausführen von Code bevor sie aus dem Speicher gelade
... nööö, nur zu. Sie müßte ebenso funktionieren.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:59 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-2025 by Thomas Breitkreuz