HINSTANCEデータ型HINSTANCEデータ型

転載:https://www.cnblogs.com/furzoom/p/hinstance.html

HINSTANCEデータ型

 

著者:馬ヤンFurzoom)(http://www.cnblogs.com/furzoom/
著作権:庭はすべてにこのブログと共通の作者に属します。転載の際は、本記事の詳細リンクを一目でわかるように記載し、執筆者の同意を得ずに削除しないでください知的財産権保護にご協力いただき、誠にありがとうございます。

在看《 WINDOWS程序设计 》过程中,对于HINSTANCE的理解很重要,网上多数说其是一个整型变量,其实是不对的。http://furzoom.com/

HINSTANCE定义

HINSTANCE数据类型-枫竹梦

通过查找HINSTANCE的定义有WINDEF.H中为:

001
DECLARE_HANDLE( HINSTANCE );

次のように、それがマクロ定義であるべきだと思って、引き続きWINDEF.H内のDECLARE_HANDLE()の定義を見てください。

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()は事前定義された条件で定義されているため、条件が真であるかどうかにかかわらず、WINDEF.Hの先頭にあるSTRICTの定義の検索を続けます。

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構造体を指すポインター変数であり、構造体には1つのint変数しかありません。WINDOWSでは、ハンドルはほとんどこのように定義されています。

投稿者:HINSTANCEデータ型 - Windowsプログラミング - メープル竹の夢

在看《 WINDOWS程序设计 》过程中,对于HINSTANCE的理解很重要,网上多数说其是一个整型变量,其实是不对的。http://furzoom.com/

HINSTANCE定义

HINSTANCE数据类型-枫竹梦

通过查找HINSTANCE的定义有WINDEF.H中为:

001
DECLARE_HANDLE( HINSTANCE );

次のように、それがマクロ定義であるべきだと思って、引き続きWINDEF.H内のDECLARE_HANDLE()の定義を見てください。

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()は事前定義された条件で定義されているため、条件が真であるかどうかにかかわらず、WINDEF.Hの先頭にあるSTRICTの定義の検索を続けます。

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構造体を指すポインター変数であり、構造体には1つのint変数しかありません。WINDOWSでは、ハンドルはほとんどこのように定義されています。

投稿者:HINSTANCEデータ型 - Windowsプログラミング - メープル竹の夢

おすすめ

転載: www.cnblogs.com/MCSFX/p/12670894.html