【问题标题】:How will MFC load the string resource?MFC 将如何加载字符串资源?
【发布时间】:2014-03-16 05:17:00
【问题描述】:

我刚刚在 http://msdn.microsoft.com/en-us/library/8fkteez0 阅读了有关 MFC 本地化的文章,并且有一个问题:

如果我创建一个名为 MyApp.exe 的应用程序,然后将德国本地化资源 DLL 制作为 MyAppDeu.dll。 MyApp.exe中有两个字符串资源,即string1和string2。我制作了 string1 的德语版本并将其放入 MyAppDeu.dll,但不要为 string2 制作德语版本。

那么在有德语UI的系统中,MyApp.exe启动时MFC会对string1和string2做什么?

谢谢

艾伦

【问题讨论】:

  • 当你尝试加载不存在的字符串时会崩溃。

标签: string mfc localization resources


【解决方案1】:

如果它以 MFC 核心支持的方式命名,则将使用该语言。 CWinApp::InitInstance 调用名为 LoadAppLangResourceDLL 的函数。它根据当前的系统语言或选择的MUI搜索带有DEU、ENU...的模块。

因此,如果您调用基类 CWinApp::InitInstance,则一切都完成了。我不知道这适用于哪个 MFC 版本。据我所知,这是在 VS-2008 或 VS-2005 中引入的......

详细说明:这个InitInstance设置了内部资源句柄。资源从通过 AfxSetResourceHandle 定义的一个或多个模块加载。有一个函数 AfxGetResourceHandle 在任何 Load... 函数执行之前使用。

你仍然有责任设置

所以所有资源负载都简单地重定向到另一个模块。这句话适用于每个 MFC 实例(DLL 和 EXE)。

【讨论】:

  • 那么实际上在加载string2的时候会出现问题,因为加载了MyAppDEU.dll而string2中不存在?
  • 是的,你会的。所有资源都必须在新的 DLL 中。我有一个特殊的程序可以帮助我为本地化的 DLL 定制和创建这样的 RC 文件。
猜你喜欢
  • 1970-01-01
  • 2017-07-08
  • 1970-01-01
  • 1970-01-01
  • 2011-08-29
  • 2013-06-27
  • 1970-01-01
  • 2018-02-12
  • 2018-10-18
相关资源
最近更新 更多