- 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/
下面函数中的DWORD_PTR有什么用 /*static*/ int FRCPACKAGE::ByHash(FRCPACKAGE* frcpackage1, FRCPACKAGE* frcpackag
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 关闭 7 年前。 这个问题是由于打字错误或无法再重现的问题引起的。虽然类似的问题可能是on-topic在
我正在尝试使用类成员作为回调,但编译器给我以下错误: Error 2 error C2440: 'type cast' : cannot convert from 'void (__stdcall C
实际上是 c++ 的新手。我写了这段代码,但说无法从“waveOutProc”转换为“DWORD_PTR”。你能告诉我如何解决吗? 谢谢 void CALLBACK Audio::waveOutPro
两者都用于存储地址和进行指针运算,两者都在 WinAPI 中定义,我什么时候应该使用 uintptr_t (cstdint) 与 DWORD_PTR (Windows.h )?在x86和x86_64中
为了支持 Win64 的 64 位寻址,Windows API 添加了一些 *_PTR 类型。 SetItemData(int nIndex,DWORD_PTR dwItemData) 当我将第二个参
编译时 #include "windows.h" #include "stdafx.h" #include "resource.h" #include "ProgressDlg.h" ....
有some new integer types在 Windows API 中支持 Win64。他们并不总是得到支持;例如they aren't present in MSVC6 . 我怎样才能写一个
根据 Herb Sutter 的 C++ Coding Standards: 101 Rules, Guidelines, and Best Practices程序员应该避免 C 风格的转换: C-s
*(DWORD_PTR*)&FunctionA = FunctionB( var1, var2, etc...); 这段代码是什么意思?它有什么作用? 我试着用谷歌搜索,但我不知道该用什么词。 前面
我发现 Windows 有一些新的 Windows Data Types DWORD_PTR, INT_PTR, LONG_PTR, UINT_PTR, ULONG_PTR 你能告诉我何时、如何以及为
我是一名优秀的程序员,十分优秀!