hinstanceとは?初心者向けWinAPIの基本と使い方をわかりやすく解説共起語・同意語・対義語も併せて解説!

  • このエントリーをはてなブックマークに追加
hinstanceとは?初心者向けWinAPIの基本と使い方をわかりやすく解説共起語・同意語・対義語も併せて解説!
この記事を書いた人

高岡智則

年齢:33歳 性別:男性 職業:Webディレクター(兼ライティング・SNS運用担当) 居住地:東京都杉並区・永福町の1LDKマンション 出身地:神奈川県川崎市 身長:176cm 体系:細身〜普通(最近ちょっとお腹が気になる) 血液型:A型 誕生日:1992年11月20日 最終学歴:明治大学・情報コミュニケーション学部卒 通勤:京王井の頭線で渋谷まで(通勤20分) 家族構成:一人暮らし、実家には両親と2歳下の妹 恋愛事情:独身。彼女は2年いない(本人は「忙しいだけ」と言い張る)


hinstanceとは?基本の意味

hinstance とは Windows API で「アプリケーションの実体を指すハンドル」です。ハンドルとは OS が資源を識別するための識別子のこと。hinstance は起動時にシステムから渡され、以後の資源読み込みやウィンドウ作成などの操作で使います。

WinMain との関係

従来の Windows アプリのエントリーポイントは WinMain です。署名の第一引数として渡されるのが hInstance です。例として次の署名を挙げます。

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, char* lpCmdLine, int nCmdShow)

この hInstance は現在のアプリの実体を指し、ウィンドウクラスを登録したり、リソースを読み込んだりする際の識別子として使われます。

HINSTANCE と HMODULE の関係

実務では HINSTANCEHMODULE と同じ意味として使われることが多いです。実際にはアプリの生存期間中、同じ値を保持し、GetModuleHandleLoadResource などの関数と一緒に使います。

使い方のポイント

ウィンドウを作るときには CreateWindowEx の第一引数として hInstance を渡します。これによりそのウィンドウがどのアプリに属するかを OS が把握できます。

リソースを読み込む場合にも hInstance を使います。例えばアイコンやダイアログテンプレート、文字列リソースはアプリの内部リソースとして格納され、hInstance を指定して取得します。

簡単なコード例

以下は簡略化した WinMain の例です。実際のアプリではエラーチェックやメッセージループなどが必要ですが、hInstance の役割を理解するための最小構成として参考になります。

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, char* lpCmdLine, int nCmdShow) {

  // ウィンドウ作成の例 hInstance を渡す

  // HWND hwnd = CreateWindowEx(0, MY_CLASS, HELLO, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 400, 300, NULL, NULL, hInstance, NULL);

  // if (hwnd == NULL) { return 0; }

  // ShowWindow(hwnd, nCmdShow);

  // UpdateWindow(hwnd);

  return 0;

}

リソースの読み込みの例

リソースのロードには GetModuleHandle などを使います。hInstance を使うことで現在のアプリのリソースへ正しくアクセスできます。

用語説明
HINSTANCEアプリケーションの実体を指すハンドル。リソースの読み込みやウィンドウの関連付けに使われます。
HMODULEモジュールのハンドル。実質的には同じ意味として使われることが多いです。
WinMain の第一引数現在のアプリの実体を識別するためのハンドルです。

以上が hinstance の基本です。初心者の方はまずこのハンドルが何を指すのかを理解し、リソースの読み込みやウィンドウの作成時にどのように使われるかを実例で確かめてください。


hinstanceの同意語

HINSTANCE
Windows APIで使われる、実行中のアプリケーションのインスタンスを表すハンドルの型。実行モジュール(EXE/DLL)を指すHMODULEと同義で、API呼び出しで互換的に利用されます。
HMODULE
Windows APIで使われる、ロード済みモジュールのハンドルの型。HINSTANCEと同義で、EXEやDLLを識別するためのハンドルとして使われます。
モジュールハンドル
ロード済みモジュール(実行ファイルやDLL)を識別するためのハンドルの一般的な呼び方。HINSTANCE/HMODULEの別名として用いられます。
アプリケーションインスタンスハンドル
現在実行中のアプリケーションのインスタンスを示すハンドル。HINSTANCEの意味とほぼ同義です。
実行モジュールハンドル
実行可能モジュール(EXE/DLL)のハンドルを指す表現。HINSTANCE/HMODULEの代替表現として使われます。
実行ファイルハンドル
実行ファイル(EXE)を表すモジュールのハンドル。HINSTANCE/HMODULEの文脈で使われることが多い表現です。
モジュール識別子ハンドル
モジュールを識別するためのハンドルの別表現。HINSTANCE/HMODULEと同義の言い換えとして用いられることがあります。

hinstanceの対義語・反対語

NULL(未割り当てのインスタンス・ハンドル)
有効な HINSTANCE がまだ割り当てられていない状態を示す、インスタンスハンドルとして値が存在しないことを表す
無効なハンドル(Invalid handle)
破損・解放済みなど、現在は使用できないハンドル。HINSTANCE として機能しない状態
プロセスの HINSTANCE(他アプリのインスタンスハンドル)
このプロセスの HINSTANCE とは別の、別アプリケーションが持つモジュールのハンドル
終了済みインスタンス(Released/Terminated HINSTANCE)
アプリが終了して利用不能になっている HINSTANCE の状態
ウィンドウハンドル(HWND)
HINSTANCE とは別の種類のハンドル。ウィンドウを識別するためのハンドルの例

hinstanceの共起語

WinMain
Windows GUIアプリのエントリポイント関数。hInstance などの引数を受け取り、アプリの初期化や初期処理を行う。
WndProc
ウィンドウが受け取る各種メッセージを処理するコールバック関数。WM_PAINT や WM_DESTROY などのイベントを処理する。
CreateWindowEx
ウィンドウを作成する API。登録済みのウィンドウクラスを基に実際のウィンドウを画面に表示する。
RegisterClassEx
ウィンドウクラスを登録する函数。後で CreateWindowEx でそのクラスのウィンドウを作成できるようにする。
WNDCLASSEX
ウィンドウクラスの情報を格納する構造体。WndProc の指定やスタイル、背景色などを設定する。
GetMessage
メッセージキューから次のメッセージを取得する関数。イベント駆動型ループの起点となる。
TranslateMessage
キーボード入力の仮想キーを文字データへ変換する補助関数。
DispatchMessage
取得したメッセージを対応するウィンドウのウィンドウプロシージャへ渡す関数。
MessageLoop
イベントを待機して処理するループ。GetMessage/TranslateMessage/DispatchMessage で構成されることが多い。
GetModuleHandle
モジュール(実行ファイルや DLL)のハンドルを取得する関数。HINSTANCE の取得にも使われる。
DllMain
DLL のエントリポイント。プロセスやスレッドのロード・アンロード時に呼ばれる関数。
LPCTSTR
文字列ポインタ型。Unicode/ANSI 環境に応じて TCHAR の不変文字列を指す。
WPARAM
Windows メッセージのパラメータの一部。多くのメッセージで意味が異なる数値型。
LPARAM
Windows メッセージのもう一方のパラメータ。WPARAM とセットで使われる長整数型
MSG
GetMessage が返すメッセージを格納する構造体。メッセージの種類や値を保持する。
WM_CREATE
ウィンドウ作成時に送られるメッセージ。初期化処理を行うのに使われる。
WM_DESTROY
ウィンドウが破棄されるときに送られるメッセージ。クリーンアップを行う。
WM_PAINT
ウィンドウの描画が必要なときに送られるメッセージ。描画処理を実装する。
ShowWindow
ウィンドウの表示状態を設定する関数。最小化・最大化・表示/非表示を切り替える。
UpdateWindow
ウィンドウのデバイスコンテキストを即時に更新して再描画を促す。
PostMessage
メッセージをウィンドウのキューへ非同期に投稿する。
SendMessage
特定のウィンドウへメッセージを同期的に送る。

hinstanceの関連用語

HINSTANCE
アプリケーションの実行モジュール(EXE/DLL)を表すハンドル。WinMain の第1引数として渡され、リソースの読み込みやウィンドウクラスの登録時に使用します。
HMODULE
モジュールを表すハンドル。HINSTANCE と同じ意合いで使われる別名で、EXE や DLL のモジュールを指します。
WinMain
Windows GUI アプリのエントリポイント。int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) の形で定義され、ここで hInstance がモジュールハンドルとして渡されます。
WndProc
ウィンドウのイベントを処理するコールバック関数。クリック・描画・閉じるなどの各種メッセージを受け取り、アプリの動作を決定します。
WNDCLASSEX
ウィンドウクラスの情報を保持する構造体。lpfnWndProc や hInstance、lpszClassName などのフィールドを含み、RegisterClassEx で登録します。
RegisterClassEx
WNDCLASSEX を用いて新しいウィンドウクラスを登録する API。これにより作成するウィンドウの動作や見た目が定義されます。
WNDCLASS
旧 API のウィンドウクラス情報を格納する構造体。RegisterClass で使用します。
RegisterClass
WNDCLASS を使ってウィンドウクラスを登録する古い API。現在は RegisterClassEx が推奨されます。
GetModuleHandle
指定したモジュールのモジュールハンドルを取得します。引数に NULL を渡すと現在の実行モジュールを返します。
GetModuleHandleEx
複数のオプションでモジュールハンドルを取得する拡張版。条件に合わせて取得方法を選べます。
LoadLibrary
DLL をロードして HMODULE を取得します。ロードしたモジュールは FreeLibrary で解放します。
FreeLibrary
ロード済みモジュールを解放します。モジュールの参照カウントを下げ、不要になったらアンロードされます。
GetModuleFileName
モジュールのファイル名またはパスを取得します。第1引数に HMODULE/HINSTANCE を渡して対象モジュールを特定します。
LoadIcon
アイコンリソースを読み込みます。第一引数はモジュールハンドル(通常は hInstance)。
LoadCursor
カーソルリソースを読み込みます。第一引数にモジュールハンドルを渡します。
LoadString
文字列リソースを読み込みます。多言語対応の文字列をリソースから取得するのに使います。
FindResource
リソースの情報をリソースディレクトリから検索します。
LoadResource
見つかったリソースをメモリにロードして使用可能にします。
FindResourceEx
言語やリソースの種類を指定してリソースを検索します。多言語対応時に便利です。
MakeIntResource
整数型のリソースIDをリソース名として扱うためのマクロ。ID 指定を簡略化します。
CreateWindowEx
ウィンドウを作成する関数。hInstance を渡して所属モジュールを指定します。
GWLP_HINSTANCE
GetWindowLongPtr で取得する、ウィンドウが属するモジュールの HINSTANCE を指すインデックス(64bit 以降の表記)。
GWL_HINSTANCE
旧 API の同等インデックス。GetWindowLong を使用する場合に用います。
DllMain
DLL のエントリポイント。プロセスやスレッドのロード・アンロード時に呼ばれ、hinstDLL はモジュールハンドルを指します。
リソーススクリプト (.rc)
リソースの定義ファイル。アイコン、ダイアログ、文字列などを定義し、ビルド時にモジュールに組み込まれます。
IDR_MAINFRAME / IDI_ICON / IDR_MENU
リソース識別子の例。リソースを区別するための名前や番号で、MakeIntResource などと組み合わせて使用します。

hinstanceのおすすめ参考サイト


インターネット・コンピュータの人気記事

awstatsとは?初心者でもわかる使い方と基本解説共起語・同意語・対義語も併せて解説!
14083viws
bing・とは?初心者のための基本ガイド:検索エンジンの仕組みと使い方共起語・同意語・対義語も併せて解説!
1944viws
着信転送とは?初心者向けガイドで分かる使い方と設定のコツ共起語・同意語・対義語も併せて解説!
840viws
リマインドメールとは?初心者にもわかる基本ガイドと使い方のコツ共起語・同意語・対義語も併せて解説!
581viws
com端子・とは?初心者にも分かる基礎ガイド|シリアルポートの使い方と歴史を解説共起語・同意語・対義語も併せて解説!
568viws
充電アダプターとは何かを徹底解説|初心者でも分かる基本と選び方のコツ共起語・同意語・対義語も併せて解説!
535viws
pinロックとは?初心者が知っておくべき基本と使い方ガイド共起語・同意語・対義語も併せて解説!
527viws
asp・とは?初心者向けに徹底解説する基本と使い方ガイド共起語・同意語・対義語も併せて解説!
457viws
16進数カラーコード・とは?初心者でもつまずかない基礎と使い方ガイド共起語・同意語・対義語も併せて解説!
440viws
ローカルポート・とは?初心者にも分かる基本と使い方ガイド共起語・同意語・対義語も併せて解説!
423viws
7zファイル・とは?初心者でもわかる使い方と特徴を解説共起語・同意語・対義語も併せて解説!
364viws
全角文字とは?初心者向け解説|全角と半角の違いをやさしく学ぶ共起語・同意語・対義語も併せて解説!
345viws
差し込み印刷・とは?初心者でもすぐわかる使い方と仕組みガイド共起語・同意語・対義語も併せて解説!
340viws
ワンタイムコード・とは?初心者でも分かる基本と使い方ガイド共起語・同意語・対義語も併せて解説!
319viws
select句・とは?初心者でも分かるSQLの基本と使い方共起語・同意語・対義語も併せて解説!
301viws
ダイレクトチャットとは?初心者向けガイドで使い方と注意点を徹底解説共起語・同意語・対義語も併せて解説!
295viws
csvダウンロードとは?初心者が今すぐ使える基本ガイド共起語・同意語・対義語も併せて解説!
294viws
none とは?初心者にもやさしく解説する意味と使い方ガイド共起語・同意語・対義語も併せて解説!
292viws
解像度スケールとは?初心者でも分かる解像度スケールの基礎と使い方共起語・同意語・対義語も併せて解説!
273viws
sha256とは?初心者が知るべき暗号ハッシュの基礎と使い道共起語・同意語・対義語も併せて解説!
234viws

新着記事

インターネット・コンピュータの関連記事