日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Delphi中DLL初始化和退出处理

發布時間:2025/3/15 编程问答 10 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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初始化和退出处理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。