查找HBITMAP类型的定义的时候发现,它的定义尽然来自于一个奇怪的宏:DECLARE_HANDLE(HBITMAP)。再查找DECLARE_HANDLE,发现它的定义是:
#define DECLARE_HANDLE(name) struct name##__ { int unused; }; typedef struct name##__ *name。以HBITMAP做为参数展开这个宏,发现HBITMAP的定义是这样一个形式:
struct HBITMAP__
{
int unused;
}; typedef struct HBITMAP__ *HBITMAP 其中的成员int unused,从名字上判断是不起作用的,不明白为什么要把HBITMAP定义成一个这样的结构类型,定义成一个整型不是更直观吗?请高人来给解释解释其中的奥妙。
#define DECLARE_HANDLE(name) struct name##__ { int unused; }; typedef struct name##__ *name。以HBITMAP做为参数展开这个宏,发现HBITMAP的定义是这样一个形式:
struct HBITMAP__
{
int unused;
}; typedef struct HBITMAP__ *HBITMAP 其中的成员int unused,从名字上判断是不起作用的,不明白为什么要把HBITMAP定义成一个这样的结构类型,定义成一个整型不是更直观吗?请高人来给解释解释其中的奥妙。
...
typedef PVOID HANDLE;
...
#define DECLARE_HANDLE(name) typedef HANDLE name
...
DECLARE_HANDLE(HBITMAP);
...HBITMAP =》void*
typedef void *HANDLE;
#define DECLARE_HANDLE(name) struct name##__ { int unused; }; typedef struct name##__ *name
#else
typedef PVOID HANDLE;
#define DECLARE_HANDLE(name) typedef HANDLE name
#endif