60

win32 应用程序的 HINSTANCE 被传递给 WinMain,但是有没有其他方法可以确定当前的 HINSTANCE(如果你不知道,我对 win32 编程很陌生!)?我需要在库中创建一个窗口,并且(因为库是跨平台的),id 不希望将其传入。

4

4 回答 4

97

如果有记忆,则GetModuleHandle(NULL);返回实例句柄。

于 2009-11-17T16:33:24.400 回答
24

__ImageBase是您的朋友,尤其是在库的情况下。

请注意,链接的博客文章(R. Chen,虽然与 Brian Bondy 链接的文章不同)值得一读(包括评论!)

于 2009-11-17T16:36:21.160 回答
8

如果您使用的是 MFC,则可以使用 AfxGetInstanceHandle。

如果您不使用 MFC,您可以使用:GetWindowLong(hWnd, GWL_HINSTANCE)

于 2009-11-17T16:20:20.870 回答
0

函数 AfxGetStaticModuleState() 可以解决问题。如果您在 dll 中调用它,函数将返回 dll 的句柄,如果在 exe 中调用,则返回可执行文件的句柄。

DWORD size;
TCHAR fileName [MAX_PATH];
HMODULE hModule = AfxGetStaticModuleState()->m_hCurrentInstanceHandle;
::GetModuleFileName (hModule, fileName, size);
于 2013-04-16T13:48:32.040 回答