我如何转发声明HANDLE?的(Win32)

时间:2010-11-08 04:05:10

标签: c++ c winapi

如何转发声明HANDLE?我不想在此特定标头中包含所有windows.h

2 个答案:

答案 0 :(得分:4)

实际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;

PS必须喜欢此发货Microsoft头文件中的#if 0

答案 1 :(得分:2)

嗯,好像我自己回答了这个。我现在只是#include编辑<windef.h>而不是<windows.h>。如果有人有这样的话,我仍然希望能够转发声明只是处理。