【问题标题】:How do I get the module handle of the satellite resource DLL? (c++ visual studio )如何获取卫星资源 DLL 的模块句柄? (c++ 视觉工作室)
【发布时间】:2011-07-17 10:53:19
【问题描述】:

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

但是,我需要使其通用 - 如何以通用方式获取模块句柄并确保在适当的情况下从附属 DLL 加载字符串?我们需要为当前加载的资源 DLL 获取适当的模块。 (如果是英文,则为 exe)

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

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

This indicates that MFC does it automatically。 那么如何获得那个 hmodule?

【问题讨论】:

    标签: c++ string resources


    【解决方案1】:

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

    顺便说一句,如果您使用资源 DLL 专门用于存储资源(即其中不包含任何代码),您可以使用 LoadLibraryExLOAD_LIBRARY_AS_DATAFILE 选项加载它们,从而加快加载速度并避免可能由于资源 dll 中嵌入的恶意代码导致的漏洞利用(但在本例中为 be careful with dialogs)。

    【讨论】:

    • 我以为exe会根据语言环境自动加载附属DLL?
    • AFAIK 自动语言选择是当您在同一个模块中拥有多种语言的相同资源时。
    • @Tim:那是 MFC 特有的东西,Win32 不会自动提供类似的东西。
    • @Tim:那么你应该添加了MFC标签,我不会回复,因为我对MFC一无所知。 :)
    【解决方案2】:

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

    否则使用 GetModuleHandle("资源模块名称")。

    【讨论】:

    • 不 - 我没有自己加载 dll - 我以为我读到操作系统会自动加载“正确的”卫星 dll。
    【解决方案3】:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多