首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

宏#define DECLARE_HANDLE(name) 的作用是什么解决思路

2012-04-01 
宏#define DECLARE_HANDLE(name) 的作用是什么查找HBITMAP类型的定义的时候发现,它的定义尽然来自于一个奇

宏#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

热点排行