HINSTANCE
読み:ハンドル-インスタンス
外語:HINSTANCE: Handle Instance
Microsoft WindowsのAPIなどに使われている、Windows用Cの変数型の一つ。
用途
インスタンスハンドルを表わすのに用いる。
例えば、WinMain関数の一番目と二番目の引数はHINSTANCE型である。
特徴
定義
かつては、間接的にvoid *で定義されていた。
typedef void *PVOID;
typedef PVOID HANDLE;
typedef HANDLE HINSTANCE;
しかし、HANDLE型と同様に現在のコンパイラーでは工夫が凝らされていて未使用の数値を内容に持つ構造体へのポインターであり、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(未使用の意)を持った構造体へのポインター変数を定義する構造となっている。こうすることで、型の異なるハンドル同士の代入を防止している。
ポインター
Win16での正体は定かではないが、Win32/Win64では、インスタンスハンドルはポインターである。より具体的には、モジュールのベースアドレスを指すポインターそのものである。
ポインターと言っても、それはOS内部の情報であるため、プログラマーが参照することは許されていない。アプリケーションは、各インスタンスを区別する目的のため、ポインターのみを利用することになる。
プログラマーに、ポインターであることを意識させずに済ませられるよう、HINSTANCEという専用の型を用意しているとも言える。
再検索