Delphi中DLL初始化和退出處理DLL_Process_Attach

<1>利用Unit的 Initalization與Finalization這兩個小節
  能夠在Unit的這兩個小節中安排Unit的進入和退出,可是
Program 與 Library並無這兩個部分,因此只能寫在Unit中。進程

<2>利用ExitProc變量
  在Library的begin ..end.中間是能夠寫代碼 的, 這裏能夠放置
DLL初始化代碼 。若是想要作善後工做,則能夠利用ExitProc變量。
咱們首先在初始化代碼 中 把ExitProc中包含的默認的善後過程地址保
存下來,而後把自定義的過程的地址賦給它,這樣DLL退出時就會執
行咱們制定的程序;在 自定義的過程的最後,把ExitProc恢復原來的
默認值,以便DLL可以繼續完成原來默認的善後工做。下面是示例:
  library MyDLL;
  ...
  OldExitProc: pointer;
  ...
  procedure MyExitProc;
  begin
  ... //善後程序
  ExitProc := OldExitProc;
  end;
  ...
  begin
  ... //初始化程序
   OldExitProc := ExitProc;
  ExitProc := @MyExitProc;
  end.get

<3>利用DllProc變量
  和ExitProc同樣,DllProc也是一個在Systemd單元中預約義的變
量。 在使用DLLProc時, 必須先寫好一個具備如下原型的程序:
  procedure DLLHandler(Reason: integer);
並在library的begin ..end.之間, 將這個DLLHandler程序的執行地
址賦給DLLProc中, 這時就能夠根據參數Reason的值分別做出相應的
處理。另外注意要 將Windows單元加入uses子句。示例以下:
  library TestDLL;
  ...
procedure MyDLLHandler(Reason: integer);
begin
case Reason of
    DLL_PROCESS_DETACH:
      begin
        ShowMessage('整個DLL的善後程序');
      end;
    DLL_Process_Attach:
      begin
        ShowMessage('整個DLL的初始化代碼 ');
      end;原型

    DLL_Thread_Attach:
      begin
        ShowMessage('當主叫端開始一個Thread時');
      end;
    DLL_Thread_Detach:
      begin
        ShowMessage('當主叫端終止一個Thread時');
      end;
end;it

end;io


//初始化代碼
DLLProc := @MyDLLHandler;
MyDLLHandle(DLL_Process_Attach);
end.
由 上例能夠知道,當DLL支援多進程(Thread)的處理時, DllProc很是
適合使用。
本文來自Delphi之窗,原文地址:http://www.52delphi.com多進程

相關文章
相關標籤/搜索