ア | イ | ウ | エ | オ |
カ | キ | ク | ケ | コ |
サ | シ | ス | セ | ソ |
タ | チ | ツ | テ | ト |
ナ | ニ | ヌ | ネ | ノ |
ハ | ヒ | フ | ヘ | ホ |
マ | ミ | ム | メ | モ |
ヤ | ユ | ヨ | ||
ラ | リ | ル | レ | ロ |
ワ | ヰ | ヴ | ヱ | ヲ |
ン |
A | B | C | D | E |
F | G | H | I | J |
K | L | M | N | O |
P | Q | R | S | T |
U | V | W | X | Y |
Z | 数字 | 記号 |
インスタンスを表わすためのハンドル。Windowsのプログラミングなどで使われる。
Windows 3.1までの16ビット環境(Win16)では、全てのプロセスが同じメモリー空間(コードセグメント)で動作した。
このため、各プロセスは互いに重なり合わないように別のアドレスにロードされ、そしてプロセスごとにインスタンスハンドルは異なっている。
Windows NTおよびWindows 95以降の32ビット環境(Win32)では、各プロセスごとに独自のメモリー空間を使用する。従って、プロセスごとにリロケート(再配置)する必要がないため、通常は実行可能ファイルに記載されたベースアドレス通りにメモリーに読み込まれる。
Win32では、インスタンスハンドルはプロセス内でのモジュールを識別するためのものである。異なるプロセス間でのやり取りに使われる物ではないため、同じプロセス内で一意であれば問題ない。従って、OS全体として見れば、インスタンスハンドルの値は重複している可能性がある。
Win32で、同じ実行ファイルの別インスタンスを識別するには、プロセスハンドルを使う。但しプロセスハンドルまで必要になるのは稀であり、一般的にはウィンドウハンドルでも充分と考えられる。
LoadIconやLoadMenuといったインスタンスハンドルを要求するAPIを使用する場合、インスタンスハンドルを得る必要がある。
C/C++のプログラムが起動された時点で、_tWinMain関数などでHINSTANCE型の引数が得られているので、これをグローバル変数として保存してもよいが、グローバル変数を使いたくない場合はAPIでも取得できる。
HINSTANCE hInst = (HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE);
HICON hIcon = LoadIcon(hInst, MAKEINTRESOURCE(IDI_hogehoge));
ただし、GetWindowLong関数でHINSTANCEを得るのは古い手法であり、移植性が失われている。
64ビット対応とするためには、後述するGetWindowLongPtr関数を使用しなければならない。
64ビットのWindows(Win64)も32ビットと大差ないが、長さが64ビットとなったため、取得するためのAPIとパラメーターが変わっているため注意が必要である。
HINSTANCE hInst = (HINSTANCE)GetWindowLongPtr(hDlg, GWLP_HINSTANCE);
この方法は、Win32でもWin64でも使用できるため、Win64への移植を想定したソフトウェアの場合は、最初からこのように記述しておいた方がよい。
コメントなどを投稿するフォームは、日本語対応時のみ表示されます