您好,登錄后才能下訂單哦!
Delphi中怎么調用動態(tài)鏈接庫,相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。
調用動態(tài)庫的兩種方法
靜態(tài)調用
這種用法的前提是在編譯之前已經(jīng)明確知道要調用DLL中的哪幾個函數(shù),編譯時在目標文件中只保留必要的鏈接信息,而不含DLL函數(shù)的代碼;當程序執(zhí)行時,利用鏈接信息加載DLL函數(shù)代碼并在內存中將其鏈接入調用程序的執(zhí)行空間中,其主要目的是便于代碼共享。
動態(tài)調用
這種方式是指在編譯之前并不知道將會調用哪些DLL函數(shù),完全是在運行過程中根據(jù)需要決定應調用哪個函數(shù),并用LoadLibrary和GetProcAddress動態(tài)獲得DLL函數(shù)的入口地址。
代碼演示
我們先創(chuàng)建一個動態(tài)鏈接庫名稱為PosPayIntf,最近幾章介紹Delphi技術的都是用這個動態(tài)庫,因為正好因為項目要做一個對接第三方微信支付寶的動態(tài)庫。入口函數(shù)為PosPayOperate
function PosPayOperate(OpType: Integer; const InPara: PChar; OutPara, OutMsg: PChar): Integer; export; stdcall;
然后我們新建一個Application,加入兩個Memo,一個combox和一個Button按鈕
靜態(tài)調用
在uses下面加入
const
SMCzkYw_DLL = 'PosPayIntf.dll'; //調用動態(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;
這樣我們在調用的時候就直接可以使用
用靜態(tài)調用動態(tài)庫相對來說代碼比較少,但是我們的動態(tài)庫必須要放到和這個EXE的程序下,如果DLL文件沒有存在,程序則無法運行,提示你少DLL文件。
動態(tài)調用
今天我們主要說的還是動態(tài)調用,因為用動態(tài)調用的方法如果DLL不存在,或是入口函數(shù)有問題,我們都可以通過try except進行捕獲,也不會影響主程序的使用。
我們在調用動態(tài)庫方法的按鈕事件里面直接定義一個THandle和一個TPublicFun,TPublicFun撒向的就是我們的入口函數(shù)
然后通過LoadLibrary來加載動態(tài)庫
調用的方式和靜態(tài)調用一樣
最后用try finally來釋放一下動態(tài)庫
看完上述內容,你們掌握Delphi中怎么調用動態(tài)鏈接庫的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。