Delphi中DLL初始化和退出处理
Delphi中DLL初始化和退出處理
choysan 2010-01-08 8:56:43<1>利用Unit的Initalization與Finalization這兩個(gè)小節(jié)
可以在Unit的這兩個(gè)小節(jié)中安排Unit的進(jìn)入和退出,但是
Program與Library并沒有這兩個(gè)部分,所以只能寫在Unit中。
<2>利用ExitProc變量
在Library的begin..end.中間是可以寫代碼的,這里可以放置
DLL初始化代碼。如果想要做善后工作,則可以利用ExitProc變量。
我們首先在初始化代碼中把ExitProc中包含的默認(rèn)的善后過程地址保
存下來,然后把自定義的過程的地址賦給它,這樣DLL退出時(shí)就會(huì)執(zhí)
行我們制定的程序;在自定義的過程的最后,把ExitProc恢復(fù)原來的
默認(rèn)值,以便DLL能夠繼續(xù)完成原來默認(rèn)的善后工作。下面是示例:
library MyDLL;
...
OldExitProc: pointer;
...
procedure MyExitProc;
begin
... //善后程序
ExitProc := OldExitProc;
end;
...
begin
... //初始化程序
OldExitProc := ExitProc;
ExitProc := @MyExitProc;
end.
<3>利用DllProc變量
和ExitProc一樣,DllProc也是一個(gè)在Systemd單元中預(yù)定義的變
量。在使用DLLProc時(shí), 必須先寫好一個(gè)具有以下原型的程序:
procedure DLLHandler(Reason: integer);
并在library的begin..end.之間, 將這個(gè)DLLHandler程序的執(zhí)行地
址賦給DLLProc中, 這時(shí)就可以根據(jù)參數(shù)Reason的值分別作出相應(yīng)的
處理。另外注意要將Windows單元加入uses子句。示例如下:
library TestDLL;
...
procedure MyDLLHandler(Reason: integer);
begin
case Reason of
??? DLL_PROCESS_DETACH:
????? begin
??????? ShowMessage('整個(gè)DLL的善後程序');
????? end;
??? DLL_Process_Attach:
????? begin
??????? ShowMessage('整個(gè)DLL的初始化代碼');
????? end;
??? DLL_Thread_Attach:
????? begin
??????? ShowMessage('當(dāng)主叫端開始一個(gè)Thread時(shí)');
????? end;
??? DLL_Thread_Detach:
????? begin
??????? ShowMessage('當(dāng)主叫端終止一個(gè)Thread時(shí)');
????? end;
end;
end;
//初始化代碼
DLLProc := @MyDLLHandler;
MyDLLHandle(DLL_Process_Attach);
end.
由上例可以知道,當(dāng)DLL支援多進(jìn)程(Thread)的處理時(shí), DllProc非常
適合使用。
總結(jié)
以上是生活随笔為你收集整理的Delphi中DLL初始化和退出处理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DELPHI参数几个概念上的区别 收藏
- 下一篇: 作者:李俊清,山东农业大学副教授。