Delphi中DLL初始化和退出處理

2021-05-21 21:45:24 字數 1481 閱讀 1139

<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;

//初始化**

Delphi陣列初始化

delphi下如何對陣列進行初始化?答 1 delphi提供對常量陣列的簡單初始化方法如下 const arrbyte array 0.2 of byte 112,32,55 2 如果想對變數陣列進行初始化,可以先宣告常量陣列,然後,對變數陣列進行賦值即可 procedure assignarr v...

Delphi 中如何初始化事件

在程式當中,我們寫了大量的事件,有些時候從資料庫讀取出來以後需要進行初始化執行,才能夠達到效果,下面以onchange事件為例。首先在窗體formshow事件裡面新增過程,procedure tbaseform.formshow sender tobject begin inherited init...

直接初始化和複製初始化

關於這個問題,國內外都有許多爭論,但我至今未找到滿意的答案,至於為為什麼,這就是今天要說明的。可能大家都有看過c primer,我看的是第四版,中文版,英文水平不怎麼樣。其中第13章,描述說,複製建構函式可用於 1.根據另乙個同型別的物件顯式或隱式初始化乙個物件 2.複製乙個物件,將它作為引數傳遞給...