GetProcAddress()用法

函數功能描述:

GetProcAddress()函數檢索指定的動態鏈接庫(DLL)中的輸出庫函數地址。


函數原型:
FARPROC?GetProcAddress(
? ? HMODULE ? hModule,????//?DLL模塊句柄
? ? LPCSTR ? ? ? lpProcName???//?函數名
);

參數:
hModule?
??[in]?包含此函數的DLL模塊的句柄。LoadLibrary或者GetModuleHandle函數可以返回此句柄。
lpProcName?
??[in]?包含函數名的以NULL結尾的字符串,或者指定函數的序數值。如果此參數是一個序數值,它必須在一個字的底字節,高字節必須為0。
??
返回值:
??如果函數調用成功,返回值是DLL中的輸出函數地址
??如果函數調用失敗,返回值是NULL。得到進一步的錯誤信息,調用函數GetLastError。

注釋:
??GetProcAddress()函數被用來檢索在DLL中的輸出函數地址。?

??lpProcName指針指向的函數名,拼寫和大小寫必須和DLL源代碼中的模塊定義文件(.DEF)中輸出段(EXPORTS)中指定的相同。

Win32?API函數的輸出名可能不同于你在代碼中調用的這些函數名,這個不同被宏隱含在相關的SDK頭文件中。如果想得到更多信息,請參考Win32函數原型(Win32?Function?Prototypes)。?


??lpProcName參數能夠識別DLL中的函數,通過指定一個與函數相聯系的序數值(在.DEF中的EXPORTS段)。GetProcAddress函數驗證那個指定的序數值是否在輸出的序數1和最高序數值之間(在.DEF中)。函數用這個序數值作為索引從函數表中讀函數地址,假如.DEF?文件不連續地定義函數的序數值,如從1到N(N是輸出的函數序數值),錯誤將會發生,GetProcAddress將會返回一個錯誤的、非空的地址,雖然指定的序數沒有對應的函數。
??為了防止函數不存在,函數應該通過名字指定而不是序數值。

要求:?
??Windows?NT/2000:?要求Windows?NT?3.1?或以后版本。
??Windows?95/98:?要求Windows?95?或以后版本。
??頭文件:?在Winbase.h中聲明,include?Windows.h。
??庫文件:?Use?Kernel32.lib。

參看:
動態鏈接庫縱覽(Dynamic-Link?Libraries?Overview),?動態鏈接庫函數(Dynamic-Link?Library?Functions),FreeLibrary,?GetModuleHandle,?LoadLibrary?

示例代碼:

??調用KERNEL32.DLL中的RegisterServiceProcess(僅在Windows98中適用)

??HMODULE?hModule=GetModuleHandle("kernel32.dll");
??if?(hModule)
??{
?????typedef?DWORD?(CALLBACK?*LPFNREGISTER)(DWORD,DWORD);
?????LPFNREGISTER?lpfnRegister;
?????lpfnRegister=(LPFNREGISTER)GetProcAddress(hModule,"RegisterServiceProcess");
?????if?(lpfnRegister)
?????{
???????(*lpfnRegister)(NULL,1L);?
?????}

??}


轉于:

http://pegasus827.bokee.com/6550868.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/458662.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/458662.shtml
英文地址,請注明出處:http://en.pswp.cn/news/458662.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

支付寶問題LaunchServices: ERROR: There is no registered handler for URL scheme alipay

LaunchServices: ERROR: There is no registered handler for URL scheme alipay (這句話其實是在告訴你 設備上沒有安裝 支付寶的客戶端,此時會走網頁端)而有人會發現并沒有HTML5網頁彈出過一會,會發現服務器返回4000支付失敗,這…

C++string類常用函數 c++中的string常用函數用法總結

string類的構造函數: string(const char *s); //用c字符串s初始化 string(int n,char c); //用n個字符c初始化 此外,string類還支持默認構造函數和復制構造函數,如string s1;string s2"hello";都是正…

排列與組合

話說,初一的時候看到這樣一道題:有一種彩票中獎率為1%,買一百張是不是一定能中獎?答案自然是否定的,但我在想,如果有200張彩票,兩張有獎,買一百張中獎率是多少?一天晚上睡…

剔除服務器返回的NSNull格式的數據

服務器返回NSNull格式的數據,真。。的煩人 解決辦法:在AFN請求里面加上下面兩段代碼,OK AFJSONResponseSerializer *response (AFJSONResponseSerializer *)manager.responseSerializer; response.removesKeysWithNullValues YES;

顯式(靜態)調用: LIB + DLL + .H

1、編程時用ad.h,ad.lib,放在項目當前目錄里2、在頭文件中加入#include "ad.h"3、在Project Setting–>Link–>Object/library modules加入ad.lib執行時將ad.dll跟你的程序放在同一目錄。 就可以直接調用dll中的函數了 當前目錄 轉載于:https://www.cnblogs.co…

boost Mutex

寫過多線程程序的人都知道,不能讓多個線程同時訪問共享的資源是至關重要的。 假如一個線程試圖改變共享數據的值,而另外一個線程試圖去讀取該共享數據的值,結果將是未定義的。 為了阻止這樣的事情發生,需要用到一些非凡的原始數據…

接入支付寶出現交易訂單處理失敗,請稍后再試(ALI64)的錯誤

上次在接入支付寶的時候就碰到了交易訂單處理失敗,請稍后再試(ALI64)這樣的錯誤,后來經過排查和總結,一般來講這種問題都是公鑰和私鑰沒有正確配置造成的。支付寶這邊為了保證數據在傳輸時不被篡改,使用了r…

c中session的用法

c中session的用法你知道嗎?下面小編就跟你們詳細介紹下c中session的用法,希望對你們有用。c中session的用法如下:Session的基本屬性:一、屬性1、SessionIDSessionID 屬性返回用戶的會話標識。在創建會話時,服務器會為每…

查看硬件信息

測試機器的硬件信息: 查看CPU信息(型號) # cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c 8 Intel(R) Xeon(R) CPU E5410 2.33GHz (看到有8個邏輯CPU, 也知道了CPU型號) # cat /proc/cpuinfo | grep physical …

支付寶集成交互流程

交互流程 功能流程 流程說明(以Android平臺為例): 第4步:調用支付接口:此消息就是本接口所描述的開發包提供的支付對象PayTask,將商戶簽名后的訂單信息傳進pay方法喚起支付寶收銀臺,訂單格式具體…

VxLAN基礎

轉自:http://blog.csdn.net/freezgw1985/article/details/16354897 一 . 為什么需要Vxlan1. vlan的數量限制4096個vlan遠不能滿足大規模云計算數據中心的需求2. 物理網絡基礎設施的限制基于IP子網的區域劃分限制了需要二層網絡連通性的應用負載的部署3. TOR交換機MA…

find_first_of()和 find_last_of() 【獲取路徑、文件名】

string 類提供字符串處理函數,利用這些函數,程序員可以在字符串內查找字符,提取連續字符序列(稱為子串),以及在字符串中刪除和添加。我們將介紹一些主要函數。 1.函數find_first_of()和 find_last_of() 執行簡單的模式匹配&#x…

支付寶集成

memo Error Domain系統繁忙,請稍后再試 Code1000 "(null)" reslut {memo "Error Domain\U7cfb\U7edf\U7e41\U5fd9\Uff0c\U8bf7\U7a0d\U540e\U518d\U8bd5 Code1000 \"(null)\"";result "";resultStatus 4000;} 請問安裝…

servlet中實現頁面跳轉return “r:”和return “f:

servlet中實現頁面跳轉return “r:”和return “f:”的區別和作用 分享| 2015-07-28 14:22741830480 | 瀏覽 48 次Pascal2015-07-28 14:26 #知道行家專業創造價值,火熱招募中!#提問者采納熱心網友r是redirect重定向,參…

多線程編程 RW_LOCK 讀寫鎖

RW鎖 讀寫鎖,也叫共享獨占鎖 互斥量 要么是鎖住狀態,要么是不加鎖狀態,而且一次只有一個線程可以對其加鎖。 讀寫鎖可以有三種狀態,讀模式下加鎖狀態,寫模式下加鎖狀態,不加鎖狀態。一次只有一個線程可以占…

Error Domain=NSCocoaErrorDomain Code=3840 JSON text did not start with array or object and option

數據請求失敗 報錯 Error DomainNSCocoaErrorDomain Code3840 "JSON text did not start with array or object and option to allow fragments not set." UserInfo{NSDebugDescriptionJSON text did not start with array or object and option to allow fragm…

vim學習筆記(4)幫助與配置

使用幫助 在Vim中輸入命令:help,即可進入幫助界面,默認是英文,可以通過以下方式安裝中文幫助(以vimcdoc-1.9.0為例): 1、下載中文幫助的文件壓縮包 2、解壓 tar -xzvf vimcdoc-1.9.0.tar.gz 3、…

C語言程序代碼優化

我認為一個好的用于科學計算的程序代碼應該:算法漂亮精妙,程序簡潔易懂,運算快速,節省內存。這里有的地方是矛盾的,比如簡潔vs易懂,時間vs空間,找個平衡吧。目前來看時間要比空間寶貴一些。寫程…

微信支付不回調支付成功的方法,這是為什么

如果你是Xcode7.2,或者IOS9.2的話,可能會遇見在微信客戶端操作返回程序之后不能執行微信的onResp回調方法的問題,就是因為一下這兩個方法被廢棄掉了,所以我的新demo替換了一個新的方法在下面。就完美解決這個問題了(并…

如何在蘋果官網下載舊版本的Xcode 方法

1 在百度里輸入“蘋果開發者中心“,進入以下頁面。點擊頁面中的“Member Center" 2 出現登錄界面。這是需要蘋果開發者帳號的,沒有帳號的可以選擇“Create Apple ID”進行注冊。已經注冊的選擇“Sign In"登錄 3 頁面跳轉后,選擇…