Windows HANDLES是无符号的32位整数吗?

时间:2019-05-28 15:54:52

标签: winapi

每个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位。我想念什么?

1 个答案:

答案 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还描述了什么是句柄。