是否有一个与平台无关的资源系统可用于C ++,就像Qt附带的那个(但不需要Qt依赖项)?
我想从我的C ++源代码中访问任意数据。也就是说,不仅仅是图标,还包括翻译或着色器等。
或者,某种虚拟文件系统库可以访问例如ZIP压缩文件之类的内容,这也符合我的需求。
是否有一个与平台无关的资源系统可用于C ++,就像Qt附带的那个(但不需要Qt依赖项)?
我想从我的C ++源代码中访问任意数据。也就是说,不仅仅是图标,还包括翻译或着色器等。
或者,某种虚拟文件系统库可以访问例如ZIP压缩文件之类的内容,这也符合我的需求。
static const char*
。然后在需要访问数据的地方#include
这些头文件。编码“资源”文件的应用程序作为预构建步骤执行。编码应用程序本身使用boost::filesystem
创建资源头文件,因此可在Windows/*nix上运行。namespace resource
{
// Generated from mainPage.htm
static const char* mainPage_[] =
{
"<html>...</html>"
};
}
对于二进制内容,我使用\x
表示法进行编码。 我还确保将数据换行,以便在编辑器中可读。
然而,我遇到了一些问题 - MS编译器不允许static const char*
大于64Kb,这是一个麻烦。 幸运的是,只有比这更大的文件是JavaScript文件,我可以轻松地将它们分成较小的块 - 大图片会是一个问题。
我们正在使用ICU ResourceBundle,并且对其非常满意。
使用pkgdata工具,ResourceBundles的打包非常灵活:可以作为共享库、静态库或可以被ICU内存映射的文件。
我刚刚在链接时将它们作为二进制块附加到可执行文件的末尾进行了修补。最后4个字节是前一个块的大小,然后程序从尾部读取数据项。
如果您需要更像文件系统类型的结构(虽然我没有尝试过),另一种方法是将所有内容放入zip文件中并将其附加到末尾。同样,您需要一些易于查找的添加数据的大小。