【问题标题】:Parse .ini file from resource during runtime using C++/boost在运行时使用 C++/boost 从资源中解析 .ini 文件
【发布时间】:2015-06-03 02:31:39
【问题描述】:

我有一个 .ini 文件,它作为 RCDATA 位于资源内部。 我在运行时从资源中加载它,我可以将它作为一个很长的字符串来获取。

我有兴趣加载 .ini 文件(从运行时的资源中)并使用 Boost 或 Win32 API 将其解析为 .ini 文件,但问题是我该怎么做?

似乎可以使用QT 来做这样的事情。

我已尝试加载资源文件并分配read_ini() 二进制数据/字符串文件,但之后不会对其进行迭代。

这样的事情有可能吗?

代码片段:

HRSRC myResource = FindResource(NULL, MAKEINTRESOURCE(101), RT_RCDATA);
unsigned int myResourceSize = SizeofResource(NULL, myResource);
HGLOBAL myResourceData = LoadResource(NULL, myResource);
char* pMyBinaryData = (char*)LockResource(myResourceData);
char *text = (char*)malloc(myResourceSize + 1);
memcpy(text, pMyBinaryData, myResourceSize);
text[myResourceSize] = 0;//last char array is null
FreeResource(myResourceData);

我在 .txt/.ini 文件中提取文本的方式。

【问题讨论】:

  • 向我们展示问题所在(“二进制数据/字符串文件,但之后不会对其进行迭代”并没有告诉我们任何事情,除非我们看到您在代码中做了什么)
  • 是的,这是可能的。
  • sehe,已编辑。 @DavidHeffernan,请提供解释/示例。谢谢。
  • 什么例子?您希望我们为您编写所有这些代码吗?
  • @DavidHeffernan 您可以选择“解释”而不是“示例”。没有人要“ze c0des”。

标签: c++ winapi embedded-resource ini boost-propertytree


【解决方案1】:

我想你可能正在寻找

std::istringstream iss(the_large_string_value);

boost::property_tree::ptree pt;
boost::property_tree::read_ini(iss, pt);

当然,您可以将(非常大的)资源作为流读取。 Boost IOstreams 有一个array_source 可以提供帮助。

这里最简单的事情是

std::string the_large_resource_string_value(pMyBinaryData, myResourceSize);

【讨论】:

    猜你喜欢
    • 2017-06-01
    • 2011-09-04
    • 1970-01-01
    • 2011-11-15
    • 2014-01-11
    • 2012-09-23
    • 2023-03-06
    • 2014-09-03
    • 2012-01-30
    相关资源
    最近更新 更多