每个https://en.wikibooks.org/wiki/Windows_Programming/Handles_and_Data_Types#HANDLE,
HANDLE被定义为Windows.h中无符号的32位数量
但是,在WinDef.h中,我们看到以下内容:
DECLARE_HANDLE (HWND);
在winnt.h中,我们看到以下内容:
#ifdef STRICT
typedef void *HANDLE;
#if 0 && (_MSC_VER > 1000)
#define DECLARE_HANDLE(name) struct name##__; typedef struct name##__ *name
#else
#define DECLARE_HANDLE(name) struct name##__{int unused;}; typedef struct name##__ *name
#endif
#else
typedef PVOID HANDLE;
#define DECLARE_HANDLE(name) typedef HANDLE name
#endif
这告诉我窗口句柄是简单的指针。在我看来,这意味着窗口句柄的最大大小取决于可寻址内存的最大大小,这在大多数新机器中为64位。我想念什么?
答案 0 :(得分:0)
句柄是指向内核空间中资源的指针的索引。
在使用中:HANDLE与指针相似。在32位计算机上为32位,在64位计算机上为64位,并具有unsigned
属性:
HANDLE h = (HANDLE)-1;
if (h < 0)
cout << "<";
else
cout << ">";
结果:“>”(均为32/64位)
在使用意义上:
只有低32位有效,因此可以截断 句柄(将其从64位传递到32位时)或符号扩展 处理(将其从32位传递到64位时)。
此FAQ还描述了什么是句柄。