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* 的作用就是用來轉換任意類型的類。 讓外部看不到這個類名

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章