手柄的大小是多少?

use*_*712 3 c windows structure handle

对于练习,我看一下STARTUPINFO结构.如您所见,最后3个元素具有类型HANDLE.

所以我想知道它的大小HANDLE.有人知道大小HANDLE吗?

Ros*_*dge 6

Windows HANDLE类型不是完全不透明的类型.Windows定义了一些您可以依赖的属性.主要的一个是你的问题的答案:它始终是类型void *.从MSDN上的Windows数据类型条目:

处理

对象的句柄.

此类型在WinNT.h中声明如下:

typedef PVOID HANDLE;

在表格中稍后您可以看到PVOID定义为void *.

所以a HANDLE的大小与之相同void *.或者换句话说,使用32位编译器时为32位,使用64位编译器时为64位.您不需要将这些值中的任何一个硬编码到代码中,而只需使用sizeof(HANDLE).

Windows HANDLE类型的另一个属性非常模糊,几乎没有记录:对于内核句柄,底部的两位始终为零.您不应该在代码中依赖于此,并希望您可以看到您永远不会想要的.我提到这一点是为了完整性,并强调微软如何定义HANDLE不仅仅是一个内部实现细节.


tem*_*def 5

最好的答案是sizeof(HANDLE)用来获取这些信息.如果我记得正确,HANDLE通常实现为typedeffor void*,因此可能是32或64位,但你不应该依赖于此.

希望这可以帮助!