问题描述
我试图在我自己的模块中找到一个资源。如果这个模块是可执行文件,那么这个很简单 - GetModuleHandle(NULL)
返回main模块的句柄。
I'm trying to find a resource in my own module. If this module is an executable, that's trivial - GetModuleHandle(NULL)
returns the handle of the "main" module.
然而,我的模块是由另一个可执行文件加载的DLL。所以 GetModuleHandle(NULL)
将返回该可执行文件的模块句柄,这显然不是我想要的。
My module, however, is a DLL that is loaded by another executable. So GetModuleHandle(NULL)
will return the module handle to that executable, which is obviously not what I want.
有没有办法确定包含当前运行代码的模块的模块句柄?在调用$ code> GetModuleHandle()中使用DLL的名称似乎是一个黑客(如果有问题的代码被移植到不同的DLL中,并不容易维护)。
Is there any way to determine the module handle of the module that contains the currently running code? Using the DLL's name in a call to GetModuleHandle()
seems like a hack to me (and is not easily maintainable in case the code in question is transplanted into a different DLL).
推荐答案
将模块句柄存放在DllMain中,然后在实际需要时使用它。很多框架(例如,MFC)会自动执行。
Store the module handle away when it is given to you in DllMain and then use it later when you actually need it. A lot of frameworks (e.g., MFC) do this automatically.
这篇关于如何获取我自己的代码的模块句柄?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!