在DELPHI應用程式中使用DLL

2021-03-31 08:56:31 字數 3479 閱讀 3519

delphi的dll建立並不複雜,下面向大家介紹delphi的dll建立方法。

1〕首先建立乙個新的dll專案(newproject),因為dll與呼叫它的主程式要分開編譯。如果dll模組已經建立在呼叫它的專案中(project),則將它的窗體(form)從project移出,另建乙個新的專案(newproject)。只需從file選單選中newproject項,然後將dll的pas模組檔案加入到專案中,再將其自動建立的form1刪除即可。

2〕在dll的dpr檔案中把program關鍵字改為library,申明為動態鏈結庫,在uses語句後面加入exports語句,指明呼叫dll的函式名。

3〕如果主程式的dpr檔案已有dll窗體createform的語句,則將其去掉。

4〕在dll的pas檔案中type......end後加入該dll的函式或過程的宣告,形式如:

functionname(argment):boolean;export;

該函式或過程應加入窗體的create和free(產生和釋放)方法。

5〕對專案進行編譯即可。

2、dll的呼叫

呼叫dll有兩種方法,一種是在應用程式裝載時呼叫,另一種是在應用程式執行時呼叫。首先介紹裝載時dll的呼叫:

(1)裝載時呼叫dll

在呼叫dll的pas檔案中,對dll函式進行外部宣告,宣告應位於implementation的uses語句後,形式如下:

implementation

uses dialogs;

function name(argment):boolean;far;external′callname′;

其中external關鍵字後面的引號內的字串是dll的檔名。宣告以後即可在pas檔案任何地方引用dll函式。

裝載時呼叫dll的優點是速度較快,程式間也可共享**。

(2)執行時呼叫dll

dll的另一種呼叫方法是在執行時呼叫。要呼叫到windows的api函式:loadlibrary,getprocaddress等。主要用於呼叫delphi和其它語言,特別是c++編譯的dll。

假定你的dll包括乙個函式:

functionmyfunc(aparam:word):string;export;

首先在程式type型別宣告處加入一句:

type

tmyfunc=function(aparam:word):string;

此句的作用如同c++中宣告的函式指標。

然後定義如下變數∶

varaptr:tfarproc;

lhnd:thandle;

s:string;

其中aptr,lhnd兩變數宣告必須有,s是dll函式返回值,視情況而定。

在呼叫dll處加入如下語句進行dll裝載:

lhnd:κloadlibrary(′路徑/dll檔名′);

呼叫完以後,用freelibrary釋放dll占用的記憶體:

freelibrary(lhnd);

下面給出乙個dll的建立以及執行時呼叫的示例,該dll主要用來檢查輸入的口令是否正確,窗體含有乙個edit編輯框,兩個按鈕button,乙個標籤label,在編輯框內輸入口令,根據比較結果返回真假值。

unit main;

inte***ce

uses wintypes,winprocs,classes,graphics,forms,controls,stdctrls,extctrls;

type

tform1=class(tform)

edit1:tedit;

label1:tlabel;

button1:tbutton;

bevel1:tbevel;

groupbox1:tgroupbox;

statuslbl:tlabel;

procedure button1click(sender:tobject);

end;

tgetpass=function(aa:string):boolean;

varform1:tform1;

getpass:tgetpass;

lhnd:thandle;

aptr:tfarproc;

implementation

uses dialogs;

procedure tform1.button1click(sender:tobject);

begin

if edit1.text=′′then

begin

messagedlg(′entersamplepasswordfirst′,mtinformation,[mbok],0);

edit1.setfocus;

endelse

begin

lhnd:=loadlibrary(′chkpword.dll′);

aptr:=getprocaddress(lhnd,′getpassword′);

if tgetpass(aptr)(edit1.text) then

statuslbl.caption:=′verifiedpassword′

else

statuslbl.caption:=′invalid password′;

freelibrary(lhnd);

end;

end;

end.

unit dllform;

inte***ce

uses wintypes,winprocs,classes,graphics,forms,controls,buttons,sysutils,stdctrls;

type

tpasswordform=class(tform)

edit1:tedit;

label1:tlabel;

bitbtn2:tbitbtn;

bitbtn1:tbitbtn;

end;

function getpassword(password:string):boolean;export;

implementation

uses dialogs;

function getpassword(password:string):boolean;

varpasswordform:tpasswordform;

begin

result:=false;

trywith passwordform do

if showmodal=mrok then

if uppercase(edit1.text)<>uppercase(password) then

messagedlg(′invalid password′,mtwarning,[mbok],0)

else

result:=true;

finally

passwordform.free;

end;

end;

end.

http://tech.sina.***.** 2000/12/12 11:40 軟體世界 林凌

在Ubuntu中使用終端刪除應用程式

在ubuntu中使用終端刪除應用程式 a.開啟終端 ctrl alt t b.輸入 dpkg list 這條命令會顯示所有已安裝的包 或者 dpkg list less 這樣可以輕鬆的使用使用者金鑰來導航 或者如果你知道軟體包的名字,你可以使用管道命令grep來查詢,使用下面的語句 dpkg lis...

在Vista中使用相容模式執行應用程式

之前我們曾介紹過 不過,對於pdf portable document format 檔案,則沒有這麼幸運了,即使在windows vista中安裝了可以建立pdf的office 2007後,仍然不能實現pdf檔案的預覽。要檢視相應pdf檔案的內容,使用者不得不安裝 執行adobe acrobat ...

在MVC應用程式中使用jQuery的驗證

呵呵,覺得很久沒有寫部落格了,均是工作忙於公司的erp系統,這是正確的,因為這才是真正的工作。今天想寫點在mvc應用程式中,使用jquery來驗證。在進行之前,還是先回看一下 mvc會員註冊 這裡有些問題需要改正的,如密碼文字框,需要把type text 改為type password 這樣在輸入密...