在 C++ 项目中嵌入 XML 字符串资源

Posted

技术标签:

【中文标题】在 C++ 项目中嵌入 XML 字符串资源【英文标题】:Embedding XML string resource in C++ project 【发布时间】:2018-02-28 15:26:32 【问题描述】:

我有一个需要翻译的 C++ 插件项目。因此,我创建了一个可用于访问字符串的 Dictionary 类。但是,我不完全确定存储字符串的最佳方式是什么。我正在考虑创建一个 XML 文件并将所有字符串存储在其中,并将它们的不同语言环境存储在一个变量名下,例如

<sHello>
  <en_GB>Hello</en_GB>
  <fr_FR>Bonjour</fr_FR>
  ...
</sHello>

但是,我希望不必将 XML 文件与其他可分发文件一起分发。插件需要跨平台,所以我在 Visual Studio 中开发 Windows 版本,在 XCode 中开发 Mac OS 版本。最好是,我的 Dictionary 类中用于访问 XML 值的 C++ 代码在两个平台上都是相同的,这意味着我可以将 XML 包含在各自的项目中,而不必担心维护 2 个单独的代码库。

是否可以以不需要分发的方式将 XML 文件嵌入为编译资源?

【问题讨论】:

这个 XML 是否包含为每个环境编译的类似配置信息?为什么 XML 优于 JSON?您可能需要引入一个用于解析 XML 或 JSON 的第三方库,或者自己编写一个。 这可能会给你一些想法:How to load a custom binary resource in a VC++ static library as part of a dll? 不要被这个被称为“二进制资源”的过程所迷惑——你也可以适应你的 XML 文本。 @PhilBrubaker 他希望它独立于平台。否则,对于仅限 Windows 的应用程序,我会按照您建议的方式进行。 @MichaelWalz 啊,谢谢,浏览得太快了。 :-) 我喜欢你的回答。 【参考方案1】:

分发 xml 文件有什么问题?

如果您真的不想分发 XML 文件,您可以制作一个小型实用程序,将 xml 文件转换为 C++ 源文件,如下所示:

// autogenerated by <put your fancy name here>
// Don't hand edit this source file

const char xmlfile[] = "<sHello>\
  <en_GB>Hello</en_GB>\
  <fr_FR>Bonjour</fr_FR>\
  ...\
</sHello>";

您可以使用任何其他合适的格式代替 XML,例如 json 或您认为最适合您需要的任何格式。

【讨论】:

我想我只是想让自己更容易分发。但我认为创建一个实用程序实际上可能是我最好的选择,有时最简单的解决方案是最好的。干杯!

以上是关于在 C++ 项目中嵌入 XML 字符串资源的主要内容,如果未能解决你的问题,请参考以下文章

如何将xml文件嵌入到资源文件中

如何从解决方案中的文件加载 XML 文件,使用嵌入式资源构建?项目 > 跨平台 > Xamarin.Forms

在 C++ 中嵌入 Python。传递接收列表列表的字符串向量

在本机 DLL 中嵌入多个同名资源 (RC) 文件

在运行时更改嵌入式资源文件

在应用程序中嵌入 C++ 编译器