我想从 .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());
注意:您的原始代码会导致未定义的行为,因为它使用未初始化的指针进行写入。肯定不是你想要的。
这是另一个变体:
关于c++ - LPWSTR 到 wstring C++,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15752871/