如何获得我自己的代码的模块句柄?
时间:2020-03-06 14:35:07 来源:igfitidea点击:
Possible Duplicate: How do I get the HMODULE for the currently executing code?
我正在尝试在自己的模块中查找资源。如果该模块是可执行文件,那么简单的GetModuleHandle(NULL)返回"主"模块的句柄。
但是,我的模块是由另一个可执行文件加载的DLL。所以GetModuleHandle(NULL)
会将模块句柄返回到该可执行文件,这显然不是我想要的。
有什么方法可以确定包含当前正在运行的代码的模块的模块句柄?在我对GetModuleHandle()的调用中使用DLL的名称对我来说似乎是一种黑客(如果将有问题的代码移植到其他DLL中,则不容易维护)。
解决方案
将模块句柄在DllMain中提供给我们时,请将其存储起来,然后在实际需要时使用。许多框架(例如MFC)会自动执行此操作。
如前所述,这可以通过保存传递给DllMain函数的模块句柄来完成。
但是还有其他原因需要保存该句柄。
例如,如果我们决定使用资源链接器将资源绑定到DLL,则需要此模块句柄才能通过LoadResource函数API获取这些资源。