宏#define DECLARE_HANDLE(name) 的作用是什么
查找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定义成一个这样的结构类型,定义成一个整型不是更直观吗?
请高人来给解释解释其中的奥妙。
[解决办法]
typedef void *PVOID;
...
typedef PVOID HANDLE;
...
#define DECLARE_HANDLE(name) typedef HANDLE name
...
DECLARE_HANDLE(HBITMAP);
...
HBITMAP =》void*
[解决办法]
如果定义成整数,那么所有的HANDLE类型都可以无需转换的通用了,不同HANDLE类型之间的类型区别也就被弱化了,但是定义成这种形式就一定需要一个类型转换。
[解决办法]
所有HANDLE都是当前机器位长(如32位、64位)的整数值,你可以用任何方式来表达这个值,比如PVOID