如何获得我自己的代码模块句柄?

Pep*_*por 14 dll winapi

可能重复:
如何获取当前正在执行的代码的HMODULE?

我正在尝试在自己的模块中找到资源.如果这个模块是一个可执行文件,那很简单 - GetModuleHandle(NULL)返回"main"模块的句柄.

但是,我的模块是由另一个可执行文件加载的DLL.所以GetModuleHandle(NULL)将模块句柄返回到该可执行文件,这显然不是我想要的.

有没有办法确定包含当前运行代码的模块的模块句柄?在调用中使用DLL的名称GetModuleHandle()对我来说似乎是一个黑客(如果有问题的代码被移植到不同的DLL中,则不易维护).

180*_*ION 13

将模块手柄存放在DllMain中,然后在实际需要时使用.许多框架(例如,MFC)自动执行此操作.


小智 6

如果DLL与MFC链接,那么有一种方法可以获取DLL的实例,其中调用了一些函数:

void dll_function()
  {
  AFX_MANAGE_STATE(AfxGetStaticModuleState());
  HINSTANCE dll_instance = AfxGetInstanceHandle();
  }
Run Code Online (Sandbox Code Playgroud)