对于练习,我会查看STARTUPINFO
结构。如您所见,最后3个元素的类型为HANDLE
。
所以我想知道HANDLE
的大小。有人知道HANDLE
的大小吗?
答案 0 :(得分:6)
Windows HANDLE
类型不是完全不透明的类型。 Windows定义了一些您可以依赖的属性。主要问题是您的问题的答案:它始终为void *
类型。来自MSDN上的Windows Data Types条目:
<强> HANDLE 强>
对象的句柄。
此类型在WinNT.h中声明如下:
typedef PVOID HANDLE;
在表格的后面,您可以看到PVOID
被定义为void *
。
因此HANDLE
的大小与void *
相同。或者换句话说,使用32位编译器时为32位,使用64位编译器时为64位。您不需要在代码中硬编码这些值,而只需使用sizeof(HANDLE)
。
Windows HANDLE
类型的其他属性非常模糊,几乎没有记录:对于内核句柄the bottom two bits are always zero。您不应该在代码中依赖于此,并希望您可以看到您永远不会想要的。我提到这一点是为了完整性,并强调微软如何定义HANDLE
不仅仅是一个内部实现细节。
答案 1 :(得分:5)
最佳答案是使用sizeof(HANDLE)
来获取此信息。如果我没记错的话,HANDLE
通常被typedef
用作void*
,因此可能是32位或64位,但你不应该依赖它。
希望这有帮助!