インスタンスハンドル

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

インスタンスを表わすためのハンドル。Windowsのプログラミングなどで使われる。

ハンドルはポインタ

Windowsでは、インスタンスハンドルはHINSTANCE型で表わされる。インスタンスごとに異なる値を持っているが、プログラマは、その内容が何であるかを意識する必要はない。

しかし、その特徴を理解しておくと、OSの動きについての理解を深めることになる。実際には、インスタンスハンドルとは、モジュールのベースアドレスを指すポインタそのものである。

ポインタと言っても、それはOS内部の情報であるため、プログラマが参照することは許されていない。このため古いWindowsのコンパイラでは、これがvoid *で定義されていた。現在のコンパイラでは工夫が凝らされていて、未使用の数値を内容に持つ構造体へのポインタであり、異なるハンドル同士の代入で警告が出せるようになっている。

Win16

Windows 3.1までの16ビット環境(Win16)では、全てのプロセスが同じメモリ空間で動作した。

このため、各プロセスは互いに重なり合わないように別のアドレスにロードされ、そしてプロセスごとにインスタンスハンドルは異なっている。

Win32

Windows NTおよびWindows 95以降の32ビット環境(Win32)では、各プロセスごとに独自のメモリ空間を使用する。従って、プロセスごとにリロケート(再配置)する必要がないため、通常は実行可能ファイルに記載されたベースアドレス通りにメモリに読み込まれる。

Win32では、インスタンスハンドルはプロセス内でのモジュールを識別するためのものである。異なるプロセス間でのやり取りに使われる物ではないため、同じプロセス内で一意であれば問題ない。従って、OS全体として見れば、インスタンスハンドルの値は重複している可能性がある。

Win32で、同じ実行ファイルの別インスタンスを識別するには、プロセスハンドルを使う。但しプロセスハンドルまで必要になるのは稀であり、一般的にはウィンドウハンドルでも充分と考えられる。