- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我发现 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_PTR
是 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.
关于windows - DWORD_PTR、INT_PTR、LONG_PTR、UINT_PTR、ULONG_PTR 何时、如何以及为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1271748/
我能否将指向集合元素的迭代器转换为 LONG_PTR? PS: LONG_PTR 是什么我不是很明白? 这是一个在运行时弹出错误的示例代码 #include #include #include
我阅读了一些代码并跳转到 windows sdk 文件:c:\program files\microsoft visual studio 8\vc\platformsdk\include\basets
我刚刚学习 C++,为了学习 winapi,我正在学习 Forgers Win32 API 教程。 这是我的代码: //MyControl.h #pragma once #include #incl
我正在使用 Win Api。我的程序使用 LONG_PTR。它在 MinGW 和 Borland C++ 编译器上都能很好地编译。但是当我尝试使用 Digital Mars C++ 编译器编译它时,它
我发现 Windows 有一些新的 Windows Data Types DWORD_PTR, INT_PTR, LONG_PTR, UINT_PTR, ULONG_PTR 你能告诉我何时、如何以及为
我是一名优秀的程序员,十分优秀!