如何获取卫星资源DLL的模块句柄? (c ++ visual studio)

时间:2011-03-17 14:20:24

标签: c++ string resources

我们已将所有字符串移动到MFC应用程序的资源(和附属DLL)。现在主要语言被合并到EXE本身,所以当我调用LoadString()时,我可以传入exe的模块句柄。

但是,我需要使这个通用 - 如何以通用方式获取模块句柄并确保我在适当的时候从卫星DLL加载字符串?我们需要为当前加载的资源DLL获取适当的模块。 (或如果是英语的话)

:: LoadString()方法将句柄作为其第一个参数 - 我们只是使用当前exe的句柄。

我是否必须确定是否需要加载DLL,或者Windows是否自动为我执行此操作。从我读过的文档中不清楚。

This indicates that MFC does it automatically。  那我怎么得到那个hmodule?

3 个答案:

答案 0 :(得分:5)

使用LoadLibrary加载资源dll后,存储其HMODULE(由LoadLibrary返回)并将其传递给LoadString函数(以及到其他资源功能)。

顺便说一句,如果您专门使用资源DLL来存储资源(即没有包含代码),您可以使用LoadLibraryEx LOAD_LIBRARY_AS_DATAFILE选项加载它们,使加载有点更快并避免由于资源dll中嵌入的恶意代码而导致的可能漏洞(但在这种情况下为be careful with dialogs)。

答案 1 :(得分:1)

您是否使用LoadLibrary(Ex)加载库?记住它返回的句柄。

否则使用GetModuleHandle(“资源模块的名称”)。

答案 2 :(得分:1)