作者:馬 岩(Furzoom) (http://www.cnblogs.com/furzoom/)
版權聲明:本文的版權歸作者與博客園共同所有。轉載時請在明顯地方注明本文的詳細鏈接,未經作者同意請不要刪除此段聲明,感謝您為保護知識產權做出的貢獻。
在看《 WINDOWS程序設計 》過程中,對於HINSTANCE的理解很重要,網上多數說其是一個整型變量,其實是不對的。http://furzoom.com/
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中句柄多被這種方式進行定義。