确定当前的HINSTANCE?

dic*_*oce 46 winapi hinstance

win32应用程序的HINSTANCE传递给WinMain,但有没有其他方法可以确定当前的HINSTANCE(如果你不知道,我是win32编程的新手!)?我需要在库中创建一个窗口(因为库是跨平台的),id不想传递它.

Jer*_*fin 76

如果内存服务,则GetModuleHandle(NULL);返回实例句柄.

  • 不完全正确:它重新支持了exe的HINSTANCE.如果代码在DLL中执行,则可能导致错误的行为 (10认同)
  • +1:通过传入模块名称,该函数也可用于获取DLL的"HINSTANCE".请注意,`HINSTANCE`和`HMODULE`在现代版本的Windows中基本相同. (4认同)
  • @Serge:从他所说的,可执行文件的HINSTANCE正是他想要的. (2认同)
  • Adrian,库中的代码如何知道它所在的模块(exe/dll)? (2认同)

Ser*_*ier 19

__ImageBase是你的朋友,特别是在图书馆的情况下.

请注意,链接的博客文章(由R. Chen提供,但与Brian Bondy关联的帖子不同)值得一读(包括评论!)


Bri*_*ndy 8

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

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

  • 这假设我已经有了一个窗口(因此,并且hwnd)......我正在尝试将窗口创建的工作推到我的库中...... (2认同)