实际 typedef 的标头HANDLE是winnt.h. 不幸的是,这里有 15K 行,因此通过包含细线来解决您的问题windef.h有点误导。
这是我的系统上的相关部分(显然,详细信息可能会因版本而异,但在实现级别不会改变,因为这会破坏现有的二进制文件):
//
// Handle to an Object
//
#ifdef STRICT
typedef void *HANDLE;
#if 0 && (_MSC_VER > 1000)
#define DECLARE_HANDLE(name) struct name##__; typedef struct name##__ *name
#else
#define DECLARE_HANDLE(name) struct name##__{int unused;}; typedef struct name##__ *name
#endif
#else
typedef PVOID HANDLE;
#define DECLARE_HANDLE(name) typedef HANDLE name
#endif
typedef HANDLE *PHANDLE;
Run Code Online (Sandbox Code Playgroud)
PS 一定喜欢#if 0这个微软头文件中的这一点。