Delphi中怎么調(diào)用動(dòng)態(tài)鏈接庫,相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。
10年積累的成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有盤州免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
調(diào)用動(dòng)態(tài)庫的兩種方法
靜態(tài)調(diào)用
這種用法的前提是在編譯之前已經(jīng)明確知道要調(diào)用DLL中的哪幾個(gè)函數(shù),編譯時(shí)在目標(biāo)文件中只保留必要的鏈接信息,而不含DLL函數(shù)的代碼;當(dāng)程序執(zhí)行時(shí),利用鏈接信息加載DLL函數(shù)代碼并在內(nèi)存中將其鏈接入調(diào)用程序的執(zhí)行空間中,其主要目的是便于代碼共享。
動(dòng)態(tài)調(diào)用
這種方式是指在編譯之前并不知道將會(huì)調(diào)用哪些DLL函數(shù),完全是在運(yùn)行過程中根據(jù)需要決定應(yīng)調(diào)用哪個(gè)函數(shù),并用LoadLibrary和GetProcAddress動(dòng)態(tài)獲得DLL函數(shù)的入口地址。
代碼演示
我們先創(chuàng)建一個(gè)動(dòng)態(tài)鏈接庫名稱為PosPayIntf,最近幾章介紹Delphi技術(shù)的都是用這個(gè)動(dòng)態(tài)庫,因?yàn)檎靡驗(yàn)轫?xiàng)目要做一個(gè)對(duì)接第三方微信支付寶的動(dòng)態(tài)庫。入口函數(shù)為PosPayOperate
function PosPayOperate(OpType: Integer; const InPara: PChar; OutPara, OutMsg: PChar): Integer; export; stdcall;
然后我們新建一個(gè)Application,加入兩個(gè)Memo,一個(gè)combox和一個(gè)Button按鈕
靜態(tài)調(diào)用
在uses下面加入
const
SMCzkYw_DLL = 'PosPayIntf.dll'; //調(diào)用動(dòng)態(tài)庫名稱
function PosPayOperate(OpType: Integer; const InPara: PChar; OutPara, OutMsg: PChar): Integer; export; stdcall;
然后在implementation下面加入
function PosPayOperate(OpType: Integer; const InPara: PChar; OutPara, OutMsg: PChar): Integer; external POSPAY_DLL;
這樣我們?cè)谡{(diào)用的時(shí)候就直接可以使用
用靜態(tài)調(diào)用動(dòng)態(tài)庫相對(duì)來說代碼比較少,但是我們的動(dòng)態(tài)庫必須要放到和這個(gè)EXE的程序下,如果DLL文件沒有存在,程序則無法運(yùn)行,提示你少DLL文件。
動(dòng)態(tài)調(diào)用
今天我們主要說的還是動(dòng)態(tài)調(diào)用,因?yàn)橛脛?dòng)態(tài)調(diào)用的方法如果DLL不存在,或是入口函數(shù)有問題,我們都可以通過try except進(jìn)行捕獲,也不會(huì)影響主程序的使用。
我們?cè)谡{(diào)用動(dòng)態(tài)庫方法的按鈕事件里面直接定義一個(gè)THandle和一個(gè)TPublicFun,TPublicFun撒向的就是我們的入口函數(shù)
然后通過LoadLibrary來加載動(dòng)態(tài)庫
調(diào)用的方式和靜態(tài)調(diào)用一樣
最后用try finally來釋放一下動(dòng)態(tài)庫
看完上述內(nèi)容,你們掌握Delphi中怎么調(diào)用動(dòng)態(tài)鏈接庫的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!