<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多進程