Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi injected .dll destruktor (https://www.delphipraxis.net/118762-injected-dll-destruktor.html)

Arnulf 14. Aug 2008 11:37


injected .dll destruktor
 
Hi
Die Frage mag etwa Blauäugig sein, aber gibt es bei eine .dll eine method um diese Sauber zu entladen?
eine Art onclose oder eben einen Destruktor wenn FreeLibrary verwendet wird.

Ich Injecte eine .dll in einen Fremden Prozess und möchte vor dem Entladen wieder alles aufräumen.
Die einzige Möglichkeit wäre für mich wenn ich einen thread starte der auf eine Nachricht wartet und dann eben alle Resourcen wieder frei gibt ( threads schließt, code hooks entfernt usw..... ). Dann wieder Nachricht zurück dass alles entladen wurde und .dll frei geben.

Aber schöner wäre es wenn das in der .dll möglich wäre - diese also bemerkt, dass sie entladen werden soll und damit vorher alles Frei gibt.

lg
Arnulf

MSSSSM 14. Aug 2008 15:44

Re: injected .dll destruktor
 
Delphi-Quellcode:
uses
  SysUtils,
  Classes,
  Windows;

{$IFNDEF CONDITIONALDEFINE}
// type def for Delphi 2-5
type
  TDLLProc = procedure(Reason: Integer);
{$ENDIF}

var
  DLLProcNext: TDLLProc;

function InitTest():integer; stdcall;
begin

   result:=0;
end;

procedure DLLMain(Reason: Integer);
begin
  case Reason of
    DLL_PROCESS_ATTACH:
      begin
       DisableThreadLibraryCalls(hInstance);
      end;
    DLL_THREAD_ATTACH:
        ;
    DLL_THREAD_DETACH:
        ;
    DLL_PROCESS_DETACH:
      begin

      end;
  end;

  if Assigned(DLLProcNext) then DLLProcNext(Reason);
end;

exports
InitTest;

begin
  DLLProcNext := Pointer(InterlockedExchange(Integer(@DLLProc), Integer(@DLLMain)));
  DLLMain(DLL_PROCESS_ATTACH);
end.
müsste gehen.

Wenns nicht geht schau mal in dieses thema


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:10 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