1. ホーム
  2. c++

[解決済み] GetModuleHandle(NULL) vs hInstance

2022-02-26 10:16:28

質問

Windows APIを使ったプログラミングをするとき、私はいつも HINSTANCE から WinMain をすぐにグローバル変数に変換します。 OKボタンを作りたい場合は、このようにします(与えられたグローバルな HINSTANCE g_hInstance ):

return CreateWindow("BUTTON", "OK", WS_TABSTOP|WS_VISIBLE|WS_CHILD|BS_DEFPUSHBUTTON, 10, 10, 100, 30, exampleParentWindow, EXAMPLECHILDID, g_hInstance, NULL);

を呼び出すことで、パラメータとして渡されたりグローバルな名前空間を占有したりすることなくインスタンスハンドルが決定されるのを最近見かけました。 GetModuleHandle(NULL) *. ということで、上の例はこんな感じになります。

return CreateWindow("BUTTON", "OK", WS_TABSTOP|WS_VISIBLE|WS_CHILD|BS_DEFPUSHBUTTON, 10, 10, 100, 30, exampleParentWindow, EXAMPLECHILDID, GetModuleHandle(NULL), NULL);

*コンパイラがサポートしている場合は GetModuleHandle(nullptr) と記述しても、同じ結果になります。

を呼び出すことの利点は何でしょうか? GetModuleHandle(NULL) を明示的に指定してください。

<サブ Fine Print 私はこれが答えを持っていることを知っているが、それはStackOverflowでそれ自身の質問として表現されていない。

どのように解決するのですか?

EXEでは、違いはありません。 hInstance から WinMain()GetModuleHandle(NULL) は、どちらも同じ HINSTANCE (.exe ファイルのモジュール)。 しかし、DLL の内部でウィンドウを作成する場合は、DLL の hInstance しかし GetModuleHandle(NULL) が返されます。 HINSTANCE をロードした EXE の。