GetModuleHandle(NULL) vs hInstance
c++, visual-c++, winapi
Solution
In an EXE, it does not make any difference. `hInstance` from `WinMain()` and `GetModuleHandle(NULL)` both refer to the same `HINSTANCE` (the module of the .exe file). But it does make a difference if you are creating windows inside of a DLL instead, since you have to use the DLL's `hInstance` but `GetModuleHandle(NULL)` will still return the `HINSTANCE` of the EXE that loaded the DLL.
Problem
When programming using the Windows API, I've always made the `HINSTANCE` from `WinMain` a global variable immediately. If I want to make an OK button, I'd do it like so (given global `HINSTANCE g_hInstance`): ``` return CreateWindow("BUTTON", "OK", WS_TABSTOP|WS_VISIBLE|WS_CHILD|BS_DEFPUSHBUTTON, 10, 10, 100, 30, exampleParentWindow, EXAMPLECHILDID, g_hInstance, NULL); ``` but lately I've been seeing the instance handle determined without having to be passed as a parameter or clogging up the global namespace, using a call to `GetModuleHandle(NULL)`*. So, the example above would look like this: ``` return CreateWindow("BUTTON", "OK", WS_TABSTOP|WS_VISIBLE|WS_CHILD|BS_DEFPUSHBUTTON, 10, 10, 100, 30, exampleParentWindow, EXAMPLECHILDID, GetModuleHandle(NULL), NULL); ``` *If your compiler supports it, you can write `GetModuleHandle(nullptr)` and the statement will have the same result. What's the advantage (if any) of calling `GetModuleHandle(NULL)` over explicitly specifying the instance handle? Fine Print: I know this has an answer, but it has not been phrased as its own question on StackOverflow.