GetModuleHandle(NULL)vs hInstance

Pro*_*oxy 22 c++ winapi visual-c++

使用Windows API进行编程时,我总是立即HINSTANCEWinMain全局变量创建.如果我想制作一个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);
Run Code Online (Sandbox Code Playgroud)

但最近我一直看到实例句柄确定,而不必作为参数传递或堵塞全局命名空间,使用GetModuleHandle(NULL)*调用.所以,上面的例子看起来像这样:

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

*如果您的编译器支持它,您可以编写GetModuleHandle(nullptr)并且语句将具有相同的结果.

调用GetModuleHandle(NULL)显式指定实例句柄的优点(如果有的话)是什么?

精细打印:我知道这有一个答案,但它并没有在StackOverflow上作为自己的问题.

Rem*_*eau 30

在一个EXE,它并没有什么差别,hInstanceWinMain()GetModuleHandle(NULL)两个指向同一个HINSTANCE(该.exe文件的模块).但是如果你在DLL中创建窗口确实会有所不同,因为你必须使用DLL hInstanceGetModuleHandle(NULL)仍然会返回HINSTANCE加载DLL的EXE.

  • +1如果有人需要一个重要的例子,请考虑哪个模块资源表[`CreateDialog`](http://msdn.microsoft.com/en-us/library/windows/desktop/ms645434(v = vs. 85).aspx)在解析被请求的对话框模板id时查找.菜单,图标等等.*找到它们*某处*. (7认同)