我想从 .dll 字符串表中读取 utf-8 测试。
像这样的东西

LPWSTR nnW;
LoadStringW(hMod, id, nnW, MAX_PATH);

之后我想将 LPWSTR nnW 转换为 std::wstring nnWstring
我这样试过:
LPWSTR nnW;
LoadStringW(hMod, id, nnW, MAX_PATH);
const int length = MultiByteToWideChar(CP_UTF8,
                                       0,   // no flags required
                                       (LPCSTR)nnW,
                                       -1,  // automatically determine length
                                       NULL,
                                       0);

std::wstring nnWstring(length, L'\0');

if (!MultiByteToWideChar(CP_UTF8,
                         0,
                         (LPCSTR)nnW,
                         -1,
                         &nnWstring[0],
                         length))

MessageBoxW(NULL, (LPCWSTR)nnWstring.c_str(),  L"wstring", MB_OK | MB_ICONERROR);

之后在MessageBoxW 中只显示第一个字母。

最佳答案

无需转换或复制。

std::wstring nnWString(MAX_PATH, 0);
nnWString.resize(LoadStringW(hMod, id, &nnWString[0], nnWString.size());

注意:您的原始代码会导致未定义的行为,因为它使用未初始化的指针进行写入。肯定不是你想要的。

这是另一个变体:
  • http://msmvps.com/blogs/gdicanio/archive/2010/01/05/stl-strings-loading-from-resources.aspx
  • 关于c++ - LPWSTR 到 wstring C++,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15752871/

    10-11 17:59