如何本地化 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的主要内容,如果未能解决你的问题,请参考以下文章