用Delphi製作DLL的方法

2021-03-31 08:56:30 字數 3133 閱讀 5420

用delphi製作dll的方法

一 dll的製作一般步驟

二 引數傳遞

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

四 全域性變數的使用

五 呼叫靜態載入

六 呼叫動態載入

七 在dll建立乙個tform

八 在dll中建立乙個***ichildform

九 示例:

十 delphi製作的dll與其他語言的混合程式設計中常遇問題:

十一 相關資料

一 dll的製作一般分為以下幾步:

1 在乙個dll工程裡寫乙個過程或函式

2 寫乙個exports關鍵字,在其下寫過程的名稱。不用寫引數和呼叫字尾。

二 引數傳遞

1 引數型別最好與window c++的引數型別一致。不要用delphi的資料型別。

2 最好有返回值[即使是乙個過程],來報出呼叫成功或失敗,或狀態。成功或失敗的返回值最好為1[成功]或0[失敗].一句話,與windows c++相容。

3 用stdcall宣告字尾。

4 最好大小寫敏感。

5 無須用far呼叫字尾,那只是為了與windows 16位程式相容。

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

1 dllproc[sysutils單元的乙個pointer]是dll的入口。在此你可用你的函式替換了它的入口。但你的函式必須符合以下要求[其實就是乙個**函式]。如下:

procedure dllenterpoint(dwreason: dword);far;stdcall;

dwreason引數有四種型別:

dll_process_attach:程序進入時

dll_process_detach程序退出時

dll_thread_attach 執行緒進入時

dll_thread_detach 執行緒退出時

在初始化部分寫:

dllproc := @dllenterpoint;

dllenterpoint(dll_process_attach);

2 如form上有td***connection元件,就uses activex,在初始化時寫一句coinitialize (nil);

3 在退出時一定保證d***connection.connected := false,並且資料集已關閉。否則報位址錯。

四 全域性變數的使用

在widnows 32位程式中,兩個應用程式的位址空間是相互沒有聯絡的。雖然dll在記憶體中是乙份,但變數是在各程序的位址空間中,因此你不能借助dll的全域性變數來達到兩個應用程式間的資料傳遞,除非你用記憶體映像檔案。

五 呼叫靜態載入

1 客戶端函式聲名:

1)大小寫敏感。

2)與dll中的宣告一樣。

如: showform(form:tform);far;external'yproject_dll.dll';

3)呼叫時傳過去的引數型別最好也與windows c++一樣。

4)呼叫時dll必須在windows搜尋路徑中,順序是:當前目錄;path路徑;windows;widows/system;windows/ssystem32;

六 呼叫動態載入

七 在dll建立乙個tform

八 在dll中建立乙個***ichildform

九 示例:

dll源**:

library project2;

uses

sysutils,

classes,

dialogs,

forms,

unit2 in 'unit2.pas' ;

varccc: pchar;

procedure inputccc(text: pchar);stdcall;

begin

ccc := text;

end;

procedure showccc;stdcall;

begin

showmessage(string(ccc));

end;

exports

openform;

inputccc,

showccc;

begin

end.

呼叫方源**:

unit unit1;

inte***ce

uses

windows, messages, sysutils, classes, graphics, controls, forms, dialogs,

stdctrls;

type

tform1 = class(tform)

button1: tbutton;

button2: tbutton;

edit1: tedit;

procedure button1click(sender: tobject);

procedure button2click(sender: tobject);

private

public

end;

varform1: tform1;

implementation

procedure openform(mainform:tform);stdcall;external'project2.dll';

procedure showccc;stdcall;external'project2.dll';

procedure inputccc(text: pchar);stdcall;external'project2.dll';

procedure tform1.button2click(sender: tobject);

begin

showccc;//這裡表明windows 32位應用程式dll中的全域性變數也是在應用程式位址空間中,16位應用程式或許不同,沒有做實驗。

end;

十 delphi製作的dll與其他語言的混合程式設計中常遇問題:

1 與powerbuilder混合程式設計

在定義不定長動態陣列方面在函式退出清理堆疊時老出現不可重現的位址錯,原因未明,大概與pb的編譯器原理有關,即使pb編譯成二進位制**也如此。

用Delphi製作DLL的方法

用delphi製作dll的方法 一 dll的製作一般步驟 二 引數傳遞 三 dll的初始化和退出清理 如果需要初始化和退出清理 四 全域性變數的使用 五 呼叫靜態載入 六 呼叫動態載入 七 在dll建立乙個tform 八 在dll中建立乙個 ichildform 九 示例 十 delphi製作的dl...

用Delphi製作動態選單

所謂動態選單是指選單項隨著程式的操作變化而變化。現在,我們用delphi來實現這一功能,具體步驟如下 1 首先,確定動態選單的資料 即要確定動態選單標題是來自windows的系統登錄檔,還是來自乙個資料庫,或者是來自乙個子目錄,主要由程式的功能而定。這裡假設主視窗名為mainform,上面已有主選單...

Delphi 製作 dll 動態鏈結庫

delphi 製作 dll 動態鏈結庫,封裝常用的函式。1,建立 dll 檔案 建立工程 檔案 mydll.dpr library mydll uses sysutils,classes,graphics,controls,forms,dialogs,stdctrls procedure mymsg...