HINSTANCE數據類型


作者:馬 岩Furzoom) (http://www.cnblogs.com/furzoom/
版權聲明:本文的版權歸作者與博客園共同所有。轉載時請在明顯地方注明本文的詳細鏈接,未經作者同意請不要刪除此段聲明,感謝您為保護知識產權做出的貢獻。

在看《 WINDOWS程序設計 》過程中,對於HINSTANCE的理解很重要,網上多數說其是一個整型變量,其實是不對的。http://furzoom.com/

HINSTANCE定義

HINSTANCE數據類型-楓竹夢

通過查找HINSTANCE的定義有WINDEF.H中為:

001
DECLARE_HANDLE( HINSTANCE );

猜測應該是一條宏定義,繼續查看DECLARE_HANDLE()的定義,也在WINDEF.H中,如下:

001
002
003
004
005
006
007
008
#ifdef STRICT
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
typedef HANDLE * PHANDLE ;

可以看出DECLARE_HANDLE()被定義在一個條件預定義中,那么條件是否成立呢,繼續查找STRICT的定義,在WINDEF.H的開頭下有如下:

001
002
003
004
005
006
007
008
#ifndef _WINDEF_
#define _WINDEF_
 
#ifndef NO_STRICT
#ifndef STRICT
#define STRICT 1
#endif
#endif /* NO_STRICT */

這樣就知道STRICT是默認被定義的。

接着看DECLARE_HANDLE()宏的定義,

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

##為字符連接,那么

001
DECLARE_HANDLE( HINSTANCE )

等同於

001
struct HINSTANCE__ { int unused; }; typedef struct HINSTANCE__ * HINSTANCE ;

HINSTANCE是一個指針變量,指向HINSTANCE結構體,而結構體的中只一個int變量。在WINDOWS中句柄多被這種方式進行定義。

來自:HINSTANCE數據類型WINDOWS程序設計楓竹夢


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM