當前位置:編程學習大全網 - 編程語言 - 如何在Delphi中使用DLL?

如何在Delphi中使用DLL?

用Delphi制作動態鏈接庫

制作動態鏈接庫的壹般步驟

雙參數轉移

三個dll的初始化和退出清理[如果需要初始化和退出清理]

四個全局變量的使用

五調用靜態加載

動態加載的六個調用

7.在DLL中創建壹個TForM。

八、在DLL中創建壹個TMDIChildForM。

九個例子:

Delphi與其他語言混合編程Dll的十個常見問題:

XI。相關信息

Dll的生成通常分為以下步驟:

1在DLL項目中編寫壹個過程或函數。

2編寫壹個Exports關鍵字,並在它下面寫下進程的名稱。不需要寫參數和調用後綴。

雙參數轉移

1的參數類型應該和window C++的參數類型相同。不要使用DELPHI數據類型。

最好有壹個返回值(甚至是壹個過程)來報告調用的成功或失敗,或者狀態。成功或失敗的返回值最好是1[成功]或0[失敗]。總之,是兼容windows c++的。

3用stdcall聲明後綴。

4最好區分大小寫。

不需要使用far後綴,這只是為了與windows 16位程序兼容。

三個dll的初始化和退出清理[如果需要初始化和退出清理]

1 DLL proc[sysutils單元的壹個指針]是DLL的入口。在這裏,您可以用您的函數替換它的條目。但是妳的函數必須滿足以下要求【其實是回調函數】。如下所示:

過程DllEnterPoint(dw reason:DWORD);遠;stdcall

有四種類型的dwReason參數:

DLL_PROCESS_ATTACH:進程進入時。

當DLL_PROCESS_DETACH進程退出時。

當DLL_THREAD_ATTACH線程進入

當DLL_THREAD_DETACH線程退出時。

在初始化部分,寫入:

DLLProc:= @ DLLEnterPoint;

DllEnterPoint(DLL _ PROCESS _ ATTACH);

2如果表單上有TdcomConnection組件,則在初始化時使用Activex並寫入壹個CoInitialize (nil );

確保DCOM的聯系。connected: = false,退出時數據集關閉。否則地址就是錯的。

四個全局變量的使用

在widnows 32位程序中,兩個應用程序的地址空間互不相關。雖然dll是內存中的副本,但是變量是在每個進程的地址空間中,所以妳不能使用DLL的全局變量來實現兩個應用程序之間的數據傳輸,除非妳使用內存鏡像文件。

五調用靜態加載

1客戶端功能信譽:

1)區分大小寫。

2)與DLL中的聲明相同。

如:showform(form:t form);遠;外部“y project _ dll . dll”;

3)調用中傳遞的參數類型也與windows c++相同。

4)調用時DLL必須在windows搜索路徑中,順序為:當前目錄;路徑path;windows寡婦\系統;windows \ ssystem32

動態加載的六個調用

1建立壹個進程類型【如果妳知道進程類型變量的本質只是壹個指針,妳就知道是怎麽回事了】。比如:

類型

my pointer = procedure(form:t form);遠;外部;

定義變量

hinst:Thandle;

showform:my pointer;

開始

hinst:= loadlibrary(' y project _ dll ');//加載壹個Dll,按文件名查找。

showform:=getprocaddress(Hinst,' showform ');//按函數名查找,區分大小寫。如果妳知道自動化對象的本質,這壹點就很清楚了。

showform(application . mainform);//找到函數入口指針時調用。

免費圖書館(Hinst);

結束;

7.在DLL中創建壹個TForM。

1把妳的窗體用到Dll中,妳的窗體中使用的關聯單元也要用到【這是最麻煩的壹點,因為妳的窗體可能會用到很多特殊的單元或者函數】。

傳遞壹個應用程序參數並使用它來創建壹個表單。

八、在DLL中創建壹個TMDIChildForM。

MDIForm。1 Dll中的FormStyle不需要是fmMDIChild。

2在CreateForm後寫下以下兩句話:

函數ShowForm(main form:t form):integer;stdcall

定義變量

form 1:t form 1;

ptr:PLongInt;

開始

ptr:=@(應用。MainForm);//先保存dll的MainForm句柄,不釋放,只替換。

ptr^:=longint(mainform);//用主調用程序的主窗體替換DLL的主窗體。主窗體是壹個特殊的窗口,專門管理應用程序中的窗體資源。

//為什麽不直接應用。MainForm := mainForm,因為應用。MainForm是只讀屬性。

Form1:=TForm1。創建(主窗體);//用參數創建

結束;

註意:參數是應用程序。調用程序的主窗體。

九個例子:

DLL源代碼:

圖書館項目2;

使用

SysUtils,

班級,

對話框,

表格,

“unit 2 . pas“{ form 2 }”中的Unit2

{$R *。RES}

定義變量

CCC:Pchar;

過程open form(main form:t form);stdcall

定義變量

form 1:t form 1;

ptr:PLongInt;

開始

ptr:=@(應用。MainForm);

ptr^:=longint(mainform);

Form1:=TForm1。創建(主窗體);

結束;

過程input cc(Text:Pchar);stdcall

開始

CCC:= Text;

結束;

程序顯示CCC;stdcall

開始

ShowMessage(字符串(CCC));

結束;

出口

OpenForm

輸入CC,

ShowCCC

開始

結束。

調用者源代碼:

單位unit 1;

連接

使用

窗口、消息、系統、類、圖形、控件、表單、對話框,

StdCtrls

類型

TForm1 = class(TForm)

button 1:TButton;

button 2:t button;

edit 1:TEdit;

程序按鈕1Click(發件人:to object);

過程按鈕2Click(發送方:to object);

私人的

{私人聲明}

公眾的

{公開聲明}

結束;

定義變量

form 1:t form 1;

履行

{$R *。DFM}

過程open form(main form:t form);stdcall外部“project 2 . dll”;

程序顯示CCC;stdcall外部“project 2 . dll”;

過程input cc(Text:Pchar);stdcall外部“project 2 . dll”;

程序TForm1。Button1Click(發件人:to object);

定義變量

正文:Pchar

開始

Text := Pchar(Edit1。正文);

// OpenForm(應用程序。MainForm);//為了調整MDICHILD

InputCCC(文本);//為了測試DLL中的全局變量是否* * *在各個應用之間共享。

結束;

程序TForm1。Button2Click(發送方:to object);

開始

ShowCCC//這說明WINDOWS 32位應用程序DLL中的全局變量也在應用程序地址空間中,16位應用程序可能不壹樣,所以沒有做實驗。

結束;

  • 上一篇:黃宏武的學術研究
  • 下一篇:雲南師範大學數學學院的專業介紹
  • copyright 2024編程學習大全網