gpt4 book ai didi

windows - DWORD_PTR、INT_PTR、LONG_PTR、UINT_PTR、ULONG_PTR 何时、如何以及为什么?

转载 作者:可可西里 更新时间:2023-11-01 12:20:14 51 4
gpt4 key购买 nike

我发现 Windows 有一些新的 Windows Data Types

DWORD_PTR, INT_PTR, LONG_PTR, UINT_PTR, ULONG_PTR

你能告诉我何时、如何以及为什么使用它们吗?

最佳答案

*_PTR 类型被添加到 Windows API 以支持 Win64 的 64 位寻址。

由于 32 位 API 通常使用 DWORD 等数据类型传递指针,因此有必要为 64 位兼容性创建新类型以替代 32 位应用程序中的 DWORD,但是在 64 位应用程序中使用时扩展到 64 位。

因此,例如,想要编写 32 位或 64 位代码的应用程序开发人员将 windows 32 位 API SetWindowLong(HWND,int,LONG) 更改为 SetWindowLongPtr(HWND,整数,LONG_PTR)

在 32 位构建中,SetWindowLongPtr 只是一个解析为 SetWindowLong 的宏,而 LONG_PTR 同样是一个解析为 的宏>长。另一方面,在 64 位构建中,SetWindowLongPtr 是一个接受 64 位长作为其第三个参数的 API,ULONG_PTRunsigned __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.

关于windows - DWORD_PTR、INT_PTR、LONG_PTR、UINT_PTR、ULONG_PTR 何时、如何以及为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1271748/

51 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com