void * 的使用以及作用

最近在学习 windows api 编程, 在学习过程中用到了很多 HWND ,HANDLE  等。

查看了定义才发现其实就是 void*

在头文件中 有一个宏 

#define DECLARE_HANDLE(name) struct name##__{int unused;}; typedef struct name##__ *name

这个到底是什么意思呢?

其实可以把 ## 看成是 黏贴 连接符, 把上面翻译出来就是:

比如外部调用了 DECLARE_HANDLE(HMYHANDLE);

struct HMYHANDLE_

{

   int  unused;

};

typedef struct HMYHANDLE_*HMYHANDLE;

其实就是把 名字传进来, 然后重新定义了一个结构体 指针。

由于改结构体中, 只有一个 int 数据成员, 所以 unused 的地址, 也是 结构体的地址。

例如:

 CMyFile* pFileAccess = new CMyFile(&m_fileReader)

 HMYHANDLE pDocument;

pDocument = (HMYHANDLE)pFileAccess 

 如果后面要使用CMyFile 的时候, 可以通过

CMyFile* mFileAccess = (CMyFile*)&pDocument->unused;

或者CMyFile* mFileAccess = (CMyFile*)&pDocument

都是可以的。

总之 ,void* 的作用就是用来转换任意类型的类。 让外部看不到这个类名

 

 

 

 

 

 

 

posted @ 2013-01-22 17:27  sinian  阅读(494)  评论(0编辑  收藏  举报