成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

為什么不能通過(guò)GetProcAddress調(diào)用CreateWindow?

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

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

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

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

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

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

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

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

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

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

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

總結(jié)

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

責(zé)任編輯:武曉燕 來(lái)源: 今日頭條
相關(guān)推薦

2022-05-22 21:23:10

前端監(jiān)控系統(tǒng)

2012-12-18 11:55:38

2021-07-30 06:49:40

SSD內(nèi)存CPU

2022-02-15 07:03:04

start 源碼run線程

2013-10-29 10:24:31

程序員漫畫

2023-09-14 13:23:42

Llama-2模型參數(shù)

2019-10-27 23:53:13

PC交換機(jī)通信

2011-05-05 17:57:18

軟件開發(fā)

2024-06-06 08:10:30

多線程Mapnull

2018-06-04 15:17:10

編程語(yǔ)言中文編程

2021-07-09 06:00:45

網(wǎng)絡(luò)釣魚培訓(xùn)數(shù)據(jù)泄露

2009-12-04 13:31:21

PHP全局變量不能生效

2017-02-07 20:49:15

2023-01-03 08:07:33

Go字符串指針

2017-12-13 12:33:14

UPS前端漏電

2023-10-30 08:51:09

平臺(tái)管理工程

2011-11-10 10:39:21

蘋果Siri

2015-07-17 11:11:20

虛擬化基礎(chǔ)架構(gòu)服務(wù)

2010-04-27 16:37:59

無(wú)線局域網(wǎng)

2025-05-14 06:24:11

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 一级在线免费观看 | 成年免费在线观看 | 欧美亚洲国语精品一区二区 | 成人免费视频观看 | 欧美8一10sex性hd | 亚洲视频一区二区三区 | 久久久一区二区 | 一级毛片视频 | 人人看人人搞 | 国产999精品久久久 午夜天堂精品久久久久 | 韩日在线视频 | 黄色一级免费 | 精品久| 超碰人人人 | av天天澡天天爽天天av | 免费一区在线 | 亚洲第一网站 | 久久一二区 | 日韩久久久久 | 精品亚洲永久免费精品 | 91在线观看视频 | 亚洲精品欧美一区二区三区 | 亚洲成人蜜桃 | 欧美综合色 | 一区二区亚洲 | 日本在线看片 | 久产久精国产品 | 在线观看视频91 | 免费视频一区二区 | 日韩高清国产一区在线 | 蜜桃视频成人 | 草久久| 午夜影院黄 | 91精品国产91久久久久久密臀 | 久久爱一区 | 男女精品久久 | 日日干夜夜操 | 在线看无码的免费网站 | 成在线人视频免费视频 | 色综合网站 | 久久久久国产 |