日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
為什么不能通過GetProcAddress調(diào)用CreateWindow?

有時候,我看到有些人在折騰這樣一個問題:
“我想使用 GetProcAddress 來獲取 CreateWindow 或者 ExitWindows 的調(diào)用地址,但是沒有成功。為什么?”

我們提供的服務(wù)有:成都網(wǎng)站設(shè)計、成都網(wǎng)站制作、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、路橋ssl等。為近千家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的路橋網(wǎng)站制作公司

通常,他們當(dāng)時是在嘗試編寫平臺調(diào)用(P/Invoke)相關(guān)的代碼,因?yàn)閺牡讓拥慕嵌葋砜?,平臺調(diào)用是通過 GetProcAddress 來實(shí)現(xiàn)的。

問題來了:為什么 GetProcAddress 不能用在這些函數(shù)上呢?

原因是:它們(CreateWindow 或 ExitWindows)并非真正的導(dǎo)出函數(shù),如果你查看對應(yīng)的頭文件,則會看到這樣的宏定義。

事實(shí)上,CreateWindow 是一個雙重宏定義,首先它會根據(jù)當(dāng)前是否定義了 UNICODE 來展開為 CreateWindowA 或者 CreateWindowW。然后,這些類似于函數(shù)的宏會再次被展開為真正的導(dǎo)出函數(shù) CreateWindowExA 或者 CreateWindowExW。

如果包含 winuser.h 頭文件,則所有這些都由編譯器自動處理,但如果出于某種原因,您希望為類似函數(shù)的宏(如 CreateWindow)使用 GetProcAddress,則必須手動展開宏以查看實(shí)際函數(shù)是什么,并將該函數(shù)名稱傳遞給 GetProcAddress。

上述原理也適用于內(nèi)聯(lián)函數(shù)。這些函數(shù)無法通過 GetProcAddress 獲取,因?yàn)樗鼈兏静粫?dǎo)出,它們在頭文件中作為源代碼提供給您調(diào)用。

請注意,某些內(nèi)容是真正的函數(shù)還是類似函數(shù)的宏(或內(nèi)聯(lián)函數(shù))可能取決于您的目標(biāo)平臺。例如,GetWindowLongPtrA 在 64 位 Windows 上是真正的導(dǎo)出函數(shù),但在 32 位 Windows 上,它只是一個解析為 GetWindowLongA 的宏。再舉一個例子,Interlocked 系列函數(shù)在 x86 版本的 Windows 上是導(dǎo)出函數(shù),但在所有其他 Windows 體系結(jié)構(gòu)上是內(nèi)聯(lián)函數(shù)。

看起來還挺復(fù)雜的,那怎么能弄清楚這一切?方法是:研究頭文件。

在頭文件中,您將會看到函數(shù)是重定向宏、類似函數(shù)的宏、內(nèi)聯(lián)函數(shù)、內(nèi)部函數(shù)還是適當(dāng)?shù)膶?dǎo)出函數(shù)。如果你無法從頭文件中弄清楚,你總是可以只編寫一個程序來調(diào)用你感興趣的函數(shù),然后查看反匯編以查看實(shí)際生成的內(nèi)容。

總結(jié)

當(dāng)有不明白的地方的時候,最好的方法還是去翻閱源文件(頭文件)。
請堅(jiān)信:任何事情(Bug)都是有原因的。


網(wǎng)站欄目:為什么不能通過GetProcAddress調(diào)用CreateWindow?
分享網(wǎng)址:http://www.dlmjj.cn/article/coisjhe.html