ju.*_*ju. 18 windows winapi mfc
我发现Windows有一些新的Windows数据类型
DWORD_PTR, INT_PTR, LONG_PTR, UINT_PTR, ULONG_PTR
Run Code Online (Sandbox Code Playgroud)
你能告诉我何时,如何以及为何使用它们?
Chr*_*cke 28
这些*_PTR类型已添加到Windows API中,以支持Win64的64位寻址.
因为32位API通常使用类似数据类型传递指针DWORD,所以有必要创建64位兼容性的新类型,可以替代DWORD32位应用程序,但在64位应用程序中使用时扩展到64位.
因此,例如,想要编写32位或64位Windows 32位API的代码的应用程序开发人员SetWindowLong(HWND,int,LONG)已更改为SetWindowLongPtr(HWND,int,LONG_PTR)
在32位身材,SetWindowLongPtr简直是解析为一个宏SetWindowLong,并且LONG_PTR同样可以解析为一个宏LONG.另一方面,在64位构建中,SetWindowLongPtr是一个API,它接受64位长作为其第3个参数,并且ULONG_PTR是typedef unsigned __int64.
通过使用这些_PTR类型,一个代码库可以为Win32和Win64目标进行编译.
执行指针运算时,这些类型也应该用于需要与64位兼容的32位代码.
因此,如果您需要访问超过40亿个元素的数组,则需要使用INT_PTR而不是INT
CHAR* pHuge = new CHAR[0x200000000]; // allocate 8 billion bytes
INT idx;
INT_PTR idx2;
pHuge[idx]; // can only access the 1st 4 billion elements.
pHuge[idx2]; // can access all 64bits of potential array space.
Run Code Online (Sandbox Code Playgroud)
克里斯贝克非常正确.值得注意的是,这些_PTR类型只是在32位应用程序上为32位宽,在64位应用程序上为64位宽的类型.就这么简单.
例如,您可以轻松使用__int3264而不是INT_PTR.
| 归档时间: |
|
| 查看次数: |
20981 次 |
| 最近记录: |