这是WinNT.h
的第519行(已构建的版本:0091)
#define DECLARE_HANDLE(name) struct name##__{int unused;}; typedef struct name##__ *name
为什么我们需要一个具有单个int成员的结构的指针,该成员的名称很奇怪,称为
unused
?我们是否需要使用像这样的一行代码?
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 *”,则存在编译器无法检测到的错误类别。
关于winapi - 这行C/C++预处理器是什么意思?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3429523/