GetProcAddress()

GetProcAddress

獲得一個指定動態鏈接庫的輸出函數或者變量的地址。


FARPROC WINAPI GetProcAddress(

__in    HMODULE hModule ,

__in    LPCSTR lpProcName 

);

參數:

hModule:目標DLL的句柄。函數 LoadLibrary 或 GetModuleHandle 可得到此句柄。

lpProcName:函數或者變量名,或者函數的順序值。如果是順序值,那麼它必須處於 low-order word(低字節),high-order word(高字節)必須爲零。

返回值:

成功:目標函數或者變量的地址。

失敗:NULL

獲得更多錯誤信息請調用函數 GetLastError 。

附註:

傳給參數 lpProcName 的函數名必須是必須是DLL文件的導出名,即def文件中的函數名。由於使用的SDK(軟件開發包)中可能會存在宏定義,導致導出名可能和你在程序裏調用的函數名不一樣。更多信息請參閱:Convirtion for Function Prototypes 。

參數 lpProcName 可以依靠一個在DLL文件的函數輸出表中的順序值進行對應的識別。函數確保這個值是從1開始到def文件中定義的最大數量。接着把這個值作爲索引在函數表裏查詢對應的函數地址。如果在def文件中不是按從1到N(N是導出函數的數量)的順序進行連續的編號,那麼可能會返回一個錯誤的或者無效的值,即使指定的地方沒有函數。

爲了防止指定的函數不存在,最好按函數名尋找函數而不是按順序。

源碼例:

參閱:Using Run-Time Dynamic Linking

要求:

頭文件:聲明於:Winbase.h;包含於:Windows.h

庫:Kernel32.h

動態鏈接庫:Kernel32.h

發佈了26 篇原創文章 · 獲贊 6 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章