LPWSTR 到 wstring C++

Car*_*ark 3 c++ wstring

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

LPWSTR nnW;
LoadStringW(hMod, id, nnW, MAX_PATH);
Run Code Online (Sandbox Code Playgroud)

之后,我想转换LPWSTR nnWstd::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);
Run Code Online (Sandbox Code Playgroud)

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

Ben*_*igt 6

无需转换或复制。

std::wstring nnWString(MAX_PATH, 0);
nnWString.resize(LoadStringW(hMod, id, &nnWString[0], nnWString.size());
Run Code Online (Sandbox Code Playgroud)

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

这是另一个变体: