这是WinNT.h的第519行(BUILD版本:0091)
#define DECLARE_HANDLE(name) struct name##__{int unused;}; typedef struct name##__ *name
为什么我们需要一个指向结构的指针,该结构具有一个名为unused的奇怪名称的int成员?
我们是否需要使用像这样的一行代码?
HINSTANCE hInstance = new HINSTANCE__;
整体声明具有相同结构的不同数据类型对我来说没有意义.这背后有什么想法?
DECLARE_HANDLE(HRGN); DECLARE_HANDLE(HRSRC); DECLARE_HANDLE(HSPRITE); DECLARE_HANDLE(HLSURF); DECLARE_HANDLE(HSTR); DECLARE_HANDLE(HTASK); DECLARE_HANDLE(HWINSTA); DECLARE_HANDLE(HKL);
解决方法
关键是不同的句柄具有不同的类型,例如,HINSTANCE不能分配给HANDLE.如果它们都被定义为“void *”,那么编译器无法检测到错误类.