如何本地化 win32(非 MFC)DLL

Posted

技术标签:

【中文标题】如何本地化 win32(非 MFC)DLL【英文标题】:How to localize a win32 (Non-MFC) DLL 【发布时间】:2013-06-21 14:45:57 【问题描述】:

我有几个 win32 DLL(非 MFC)以及用于不同语言的单独 .rc 文件,目前我们替换 rc 文件并为每个语言环境再次构建完整的 DLL。 我试图找到一种更好的方法,并发现 MFC DLL 有一个叫做卫星 dll 的东西,其中我们可以有一个用于代码的 DLL 和用于单个 rc 文件的其他资源 DLL。 但是这个资源/卫星 DLL 的解决方案似乎不适用于非 MFC dll。

谁能告诉我本地化此类非 MFC dll 的最佳方法是什么,这样我们就不需要为每个单独的语言环境重新生成完整的 Dll。

提前致谢 拉胡尔

【问题讨论】:

您需要记录您的 Windows 版本要求,如果还需要支持 XP,这不是详细信息。对 Vista 及更高版本的 MUI 支持是 documented here。 【参考方案1】:

你没有理由不能对非 MFC dll 做同样的事情 - 我已经做过很多次了。

您只需要创建一组纯资源 DLL,为每种支持的语言创建一个 DLL,并且(从您的主 DLL)在运行时动态加载,或者为它们提供所有相同的名称并在安装期间部署正确的版本.

This MSDN page 描述了如何创建仅资源 DLL。虽然它提到它对 MFC 很有帮助,但根本没有必要使用 MFC - 您可以应用 MFC 用来决定加载哪个卫星的相同逻辑。

部分截图

【讨论】:

嗨 Roger,我已经尝试过并创建了一个 dllNameKOR.dll,但是当我将此 dll 放在同一个文件夹中并尝试启动我的产品的韩文版本时,我仍然看到英文资源字符串,这意味着运行时无法加载资源 dll *KOR.dll。我当然可以做 LoadLibrary,但我的 DLL 中有很多对话框,如果我做 LoadLibrary 解决方案,那么我将不得不以编程方式更改所有对话框/UI 按钮的标题和大小(我想通过自动加载来避免) @Rahul 你必须使用LoadLibrary并且你必须为每种语言设计资源(包括对话框模板) - 你不能跳过那一步,即使你使用MFC。 MFC 所做的只是代表您处理LoadLibrary 嗨,Roger,我将所有资源和对话框模板分别放在不同的 rc 文件中。那么您的意思是我必须通过代码将特定于语言环境的设置(x、y、宽度、高度和标题字符串)应用于 UI 元素,而 MFC 不会自动执行此操作?

以上是关于如何本地化 win32(非 MFC)DLL的主要内容,如果未能解决你的问题,请参考以下文章

本地化基于 MFC 的 DLL?

(转载)DLL动态链接库编程入门之二:非MFC DLL

MFC:使用单独的资源 dll 本地化 MFC APP 的步骤

MFC:Win32-Dll及MFC-Dll编写调用

计算机丢失msvcp120.dll解决办法

C#的winform程序,引用了system.speech.dll,在本地win7,32机器正常运行,64位就报错