Delphi中DLL初始化和退出处理
Delphi中DLL初始化和退出處理
choysan 2010-01-08 8:56:43<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.
<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;
end;
//初始化代碼
DLLProc := @MyDLLHandler;
MyDLLHandle(DLL_Process_Attach);
end.
由上例可以知道,當DLL支援多進程(Thread)的處理時, DllProc非常
適合使用。
總結
以上是生活随笔為你收集整理的Delphi中DLL初始化和退出处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DELPHI参数几个概念上的区别 收藏
- 下一篇: 作者:李俊清,山东农业大学副教授。