Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何为C++;(MSVC 2008)解决方案?_C++_Visual Studio 2008_Resources_Localization - Fatal编程技术网

C++ 如何为C++;(MSVC 2008)解决方案?

C++ 如何为C++;(MSVC 2008)解决方案?,c++,visual-studio-2008,resources,localization,C++,Visual Studio 2008,Resources,Localization,我们终于本地化了我们的应用程序,需要为字符串表创建附属DLL(一个月的过程从源代码中取出硬编码字符串) 我一直在看MSDN和其他帮助,但我对实际构建语言DLL的机制感到困惑 我们有英语资源在EXE本身。据我所知,我们现在需要创建名为MyAPPXXX.DLL的DLL项目 我不知道我们应该怎么做。是否只有一个资源/rc文件和文件中的不同部分,或者是否为每种语言复制了rc文件并替换了翻译 我试着按照我在其他地方看到的关于如何做这件事的说明去做,结果迷路了 是每种语言都需要一个DLL,还是同一个项目有多

我们终于本地化了我们的应用程序,需要为字符串表创建附属DLL(一个月的过程从源代码中取出硬编码字符串)

我一直在看MSDN和其他帮助,但我对实际构建语言DLL的机制感到困惑

我们有英语资源在EXE本身。据我所知,我们现在需要创建名为MyAPPXXX.DLL的DLL项目

我不知道我们应该怎么做。是否只有一个资源/rc文件和文件中的不同部分,或者是否为每种语言复制了rc文件并替换了翻译

我试着按照我在其他地方看到的关于如何做这件事的说明去做,结果迷路了

是每种语言都需要一个DLL,还是同一个项目有多个配置?如果是后者,如何实现

以下是我读过的关于这一点的页面列表——但相互矛盾的信息和我的无知让我感到困惑:

编辑:


我可以为不同的语言创建一个rc文件的不同部分吗?或者我必须为rc文件制作副本吗?每个语言dll一个副本?

您可以有多个.rc文件。从MS生成的环境中,唯一不允许这样做的是WDK(Windows驱动程序工具包),但在那里,您可以使用
#include
语句来解决这个问题

实际上,您组合或分离语言的方式完全取决于您。资源附带了一个语言标识符(您以
language LANG_意大利语,SUBLANG_意大利语
的形式给出,尽管
winnt.rh
winres.h
afxres.h
可能必须包含在语言的符号名称中),因此可以在一个DLL中携带多种语言。您还可以在.exe中定义一组核心语言,并将其他语言分别放在一个.dll文件中

然而,过去在选择语言方面存在问题(如果用户没有明确选择),这就是微软在Vista中引入支持的原因

在我的部署中,到目前为止最好的选择始终是每个DLL使用一种语言,在.exe中使用一种“核心语言”

我也喜欢每种语言使用单独的.rc文件,但使用
#ifdef

注意:没有看到你的链接更新,现在浏览它们


您的第一个链接“创建仅限资源的DLL”,提示我添加另一个小事实。因为这样的DLL没有入口点和代码,所以可以在x64进程中使用为x86编译的DLL
LoadLibraryEx
with
LOAD\u LIBRARY\u AS\u DATAFILE
也将允许它用于包含代码的文件


好的,.rc文件中有什么内容?通常,.rc文件的外观如下所示:

// ...
#include "afxres.h"
// ...
LANGUAGE LANG_*, SUBLANG_*

IDR_MAINFRAME MENU
// ... language-specific menu entries

IDD_ABOUTBOX DIALOGEX 0, 0, ...
// ... language specific pre-filled dialogs, control sizes adjusted and all

STRINGTABLE
// ... language-specific *strings*
END

因此,答案取决于具体情况。如果没有需要翻译的菜单和对话框,只需在每个.rc文件中放置一个特定于语言的字符串表,然后从中构建.dll即可(如果使用
/noentry
,就可以了)。但是,如果除了需要翻译的裸字符串之外还有其他项目,那么也必须包括这些项目(通常对话框和菜单是比较常见的)。在这种情况下,您可以调整每种语言的控件大小和位置。但请注意,这方面的维护成本可能相当高。有更好的解决方案,例如,wxWidgets使用所谓的袋大小器来容纳长字符串。

谢谢-但这一工作机制仍然是个谜-具体来说,dll的rc文件中有什么?我们在exe中使用英语,我可以按照您的建议为每个DLL使用一个lang。exe中有多个rc文件需要本地化。@蒂姆:看看这是否还有帮助。否则,我想你必须给出更多的提示。也许有一些极简主义的例子。谢谢你的最后一次编辑。维护问题是正确的-如果对话框被复制到所有地方!我想我对语言和副语言感兴趣。再次感谢。一个问题-我是否需要为每个语言dll创建新的rc文件,还是可以将一个rc中的所有字符串划分为各自的语言部分?@Tim:您可以将它们放在一个rc文件中。它前面的
语言将定义它的去向。但是,如果要分离生成的DLL,则需要添加
#ifdef
,以从每个相应的DLL中排除除所需语言以外的所有语言。否则,每个DLL将包含所有语言:)使用附属DLL自动本地化应用程序是.NET的一项功能。您可以模拟它,但这取决于您调用LoadLibrary并将适当的实例句柄传递给LoadString()。