AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Dll-Ausführen von Code bevor sie aus dem Speicher geladen wi
Thema durchsuchen
Ansicht
Themen-Optionen

Dll-Ausführen von Code bevor sie aus dem Speicher geladen wi

Ein Thema von Jörn · begonnen am 27. Sep 2004 · letzter Beitrag vom 30. Sep 2004
Antwort Antwort
Jörn

Registriert seit: 5. Sep 2003
Ort: Helmstedt
312 Beiträge
 
#1

Dll-Ausführen von Code bevor sie aus dem Speicher geladen wi

  Alt 27. Sep 2004, 22:41
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.
  Mit Zitat antworten Zitat
supermuckl

Registriert seit: 1. Feb 2003
1.340 Beiträge
 
FreePascal / Lazarus
 
#2

Re: Dll-Ausführen von Code bevor sie aus dem Speicher gelade

  Alt 27. Sep 2004, 22:46
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"
Das echte Leben ist was für Leute...
... die im Internet keine Freunde finden!
  Mit Zitat antworten Zitat
Benutzerbild von fiasko
fiasko

Registriert seit: 10. Dez 2002
Ort: Dresden
506 Beiträge
 
#3

Re: Dll-Ausführen von Code bevor sie aus dem Speicher gelade

  Alt 27. Sep 2004, 23:16
Dafür gibt es imho den finalization Abschnitt - ich denke mal der funzt auch in DLL's.
Thomas Liske
Posts comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
  Mit Zitat antworten Zitat
Jörn

Registriert seit: 5. Sep 2003
Ort: Helmstedt
312 Beiträge
 
#4

Re: Dll-Ausführen von Code bevor sie aus dem Speicher gelade

  Alt 27. Sep 2004, 23:20
Zitat von supermuckl:
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"
Ja das ist ja das Problem - die Hostanwendung ist ein Webserver, wie bei mir zB Sambar, und die hab ich ja nun nicht geschrieben. Aber das mit finalization werd ich gleich mal testen.

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.
  Mit Zitat antworten Zitat
Benutzerbild von c113plpbr
c113plpbr

Registriert seit: 18. Nov 2003
Ort: localhost
674 Beiträge
 
Delphi 2005 Professional
 
#5

Re: Dll-Ausführen von Code bevor sie aus dem Speicher gelade

  Alt 28. Sep 2004, 14:48
Soweit ich weis, is dies die "Einzig Wahre" Methode:
Delphi-Quellcode:
procedure EntryProc(dwReason: DWORD);
begin
  if (dwReason = DLL_PROCESS_DETACH) then
  begin

  end;
end;

begin
  DLLProc := @EntryProc;
end.
Deine Methode mag zwar funktionieren, aber diese hier ist dafür prädestiniert *g*
siehe Delphi-Referenz durchsuchenDLLProc

ciao, Philipp
Philipp
There is never enough time to do all the nothing you want.
*HABENWILL*
  Mit Zitat antworten Zitat
Golze

Registriert seit: 26. Aug 2004
Ort: Berlin
32 Beiträge
 
Delphi 5 Enterprise
 
#6

Re: Dll-Ausführen von Code bevor sie aus dem Speicher gelade

  Alt 29. Sep 2004, 21:03
Hi zusammen,
Philipp hat recht. Deshalb hier noch mal von mir ein kleines komplettes Beispiel

Delphi-Quellcode:
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.
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.
Kay Golze
Wo Gold ist, muß es auch glänzen.
  Mit Zitat antworten Zitat
Jörn

Registriert seit: 5. Sep 2003
Ort: Helmstedt
312 Beiträge
 
#7

Re: Dll-Ausführen von Code bevor sie aus dem Speicher gelade

  Alt 29. Sep 2004, 21:10
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?
  Mit Zitat antworten Zitat
Golze

Registriert seit: 26. Aug 2004
Ort: Berlin
32 Beiträge
 
Delphi 5 Enterprise
 
#8

Re: Dll-Ausführen von Code bevor sie aus dem Speicher gelade

  Alt 30. Sep 2004, 10:42
... nööö, nur zu. Sie müßte ebenso funktionieren.
Kay Golze
Wo Gold ist, muß es auch glänzen.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:47 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz