VC顯示鏈結Dll的檢查

2021-04-14 06:15:40 字數 1636 閱讀 4310

最近做程式需要使用loadlibrary的方式載入動態庫,步驟如下:

1. 使用loadlibrary載入動態庫。(遇到乙個問題,見補充說明)

2. 然後使用getprocaddress函式,獲取動態庫中的匯出函式的位址。顯式

鏈結到dll 的進

程呼叫getprocaddress 來獲

取dll

匯出函式的位址。使用返回的函式指標呼叫

dll

函式。getprocaddress

將(由loadlibrary

、afxloadlibrary

或getmodulehandle

返回的)

dll 模組

控制代碼和要

呼叫的函式名或函式的

匯出序號用作引數。

由於是通過指

針呼叫dll 函式並且沒有

編譯時型別檢查

,需確保函式的引數是正確的,以便不會超出在堆

棧上分配的記憶體和不會導致

訪問衝突。確保

型別安全的一

種方法是檢視

匯出函式的函式原型,並

建立函式指

針的匹配typedef。

例如:typedef uint (callback* lpfndllfunc1)(dword,uint);

...hinstance hdll; // handle to dll

lpfndllfunc1 lpfndllfunc1; // function pointer

dword dwparam1;

uint uparam2, ureturnval;

hdll = loadlibrary("mydll");

if (hdll != null)

else}調

用getprocaddress

時指定所需函式的方式取決於

dll

的生成方式。僅當要

鏈結到的dll 是用模組定

義(.def)

檔案生成的,並且序號在dll 的.def 檔案的exports

節中與函式一起列出

時,才能獲取

匯出序號。如果dll 具有許多

匯出函式,則相

對於使用函式名,使用

匯出序號

呼叫getprocaddress 的速度稍快一些,因

為匯出序號是dll

匯出表的索引。使用

匯出序號,getprocaddress 可直接定位函式,而不是將指定名稱與dll

匯出表中的函式名進行比

較。但是,僅當有

權控制.def 檔案中

匯出函式的序號分配時,才

應使用匯出序號

呼叫getprocaddress。

補充說明:

遇到問題描述:再鏈結乙個dll時,loadlibrary在某些機器上返回失敗,而某些機器上能返回成功。如果使用loadlibraryex函式,能載入成功,但是在使用時, 會出現莫名其妙的問題,例如string strtext;這樣的語句都會異常。

問題解決辦法:使用vc6.0自帶工具depend.exe查詢鏈結dll時缺少的依賴的庫。

depend.exe使用方法:用其直接開啟dll即可。

這個方法是別人使用的,發現這個工具非常好用,發揚之……  

VC 動態鏈結庫 DLL 程式設計

vc 動態鏈結庫 dll 程式設計 一 理解庫 vc 動態鏈結庫 dll 程式設計 二 非mfc dll vc 動態鏈結庫 dll 程式設計 三 mfc規則dll vc 動態鏈結庫 dll 程式設計 四 mfc擴充套件 dll vc 動態鏈結庫 dll 程式設計 五 dll典型例項 動態鏈結庫 dl...

在VC中鏈結動態鏈結庫(DLL)的方法

1.hinstance loadlibrary lpctstr lplibfilename 2.farproc getprocaddress hmodule hmodule,lpcwstr lpprocname 3.bool freelibrary hmodule hlibmodule 這最直觀的一...

Python 呼叫VC 的動態鏈結庫 DLL

1.首先vc 的dll的匯出函式定義成標準c的匯出函式 複製 如下 ifdef lrdlltest exports define lrdlltest api declspec dllexport else define lrdlltest api declspec dllimport endif e...