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不仅仅是一个内部实现细节.
最好的答案是sizeof(HANDLE)用来获取这些信息.如果我记得正确,HANDLE通常实现为typedeffor void*,因此可能是32或64位,但你不应该依赖于此.
希望这可以帮助!