HINSTANCE

読み:ハンドル・インスタンス
外語:HINSTANCE: Handle Instance
品詞:名詞

Microsoft WindowsAPIなどに使われている、Windows用Cの変数型の一つ。

インスタンスハンドルを表わすのに用いる。

例えば、WinMain関数の一番目と二番目の引数はHINSTANCE型である。

ポインタ

インスタンスハンドルは、実は単なる数値変数ではなく、OSが内部で利用する情報に対するポインタである。

但し、その内部をアプリケーションから参照することは許されていない。アプリケーションは、各インスタンスを区別する目的のため、ポインタのみを利用することになる。

定義

かつてはvoid *だったが、現在のコンパイラでは工夫が凝らされていて未使用の数値を内容に持つ構造体へのポインタであり、Windowsにおいては他のハンドルもまた同様の扱いとなっている。

Microsoft Visual C++ 2003環境では、HINSTANCE型として、windef.hで次のように定義される。

DECLARE_HANDLE (HINSTANCE)

DECLARE_HANDLEはマクロであり、winnt.hで、次のように定義されている。

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

nameにHINSTANCEを代入し、このマクロを展開すると、次のようになる。

#define struct HINSTANCE__ { int unused; }; typedef struct HINSTANCE__ *HINSTANCE

つまり、int型の変数unused(未使用の意)を持った構造体へのポインタ変数を定義する構造となっている。