将Win32资源文件加载为wstringstream

时间:2014-01-08 15:28:59

标签: c++ visual-studio winapi visual-c++ resources

这是对问题的跟进和回答here。我想使用文本文件作为资源,然后将其加载为stringstream,以便我可以解析它。

以下代码显示了我目前拥有的内容:

std::string filename("resource.txt");
HRSRC hrsrc = FindResource(GetModuleHandle(NULL), filename.c_str(), RT_RCDATA);
HGLOBAL res = LoadResource(GetModuleHandle(NULL), hrsrc);
LPBYTE data = (LPBYTE)LockResource(res);
std::stringstream stream((LPSTR)data);

但是,我不确定如何扩展它以使用wstringstream读取unicode文本文件。天真的方法产生了不可读的字符:

...
LPBYTE data = (LPBYTE)LockResource(res);
std::wstringstream wstream((LPWSTR)data);

由于LPBYTE只不过是CHAR*,因此毫不奇怪,这不起作用,但天真地将资源转换为WCHAR*LPWSTR)也不起作用:

...
LPWSTR data = (LPWSTR)LockResource(res);
std::wstringstream wstream(data);

我猜这是因为WCHAR是16位而不是像CHAR那样的8位,但我不知道如何解决这个问题。

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

您的评论提供了关键缺失细节。您编译为资源的文件编码为UTF-8。所以明显的选择是:

  1. 使用问题中的代码,获取指向资源的指针,编码为UTF-8,并传递MultiByteToWideChar以转换为UTF-16。然后您可以将其放入wstring
  2. 在编译资源之前,将编译的文件转换为UTF-16。然后你问题中的代码就可以了。