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′callname′;
其中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′,mtinformation,[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 這樣在輸入密...