我似乎遗漏了将wostringstream转换为LPCWSTR的问题。
void counter_error(const wstring& input) {
wostringstream tempss;
tempss << L"Cannot find counter " << input;
LPCWSTR temp = tempss.str().c_str();
MessageBoxW(0, temp, L"ERROR", 0);
}
“错误”标题显示正常,但下面的文字是乱码。我认为可能是c_str()函数返回一个常规的char数组而不是一个wchar数组,但是intellisense告诉我它返回一个wchar数组。
答案 0 :(得分:2)
这一行看起来有问题:
LPCWSTR temp = tempss.str().c_str();
tempss.str()
创建一个临时字符串,最后会被销毁。
尝试
void counter_error(const wstring& input) {
wostringstream tempss;
tempss << L"Cannot find counter " << input;
wstring temp_str = tempss.str();
LPCWSTR temp = temp_str.c_str();
MessageBoxW(0, temp, L"ERROR", 0);
}
或者,如 @JoachimPileborg 建议的那样,请考虑
MessageBoxW(0, (wstring(L"Cannot find counter " + input).c_str(), ...)
它仍会创建一个临时变量,但在从MessageBoxW
返回之前不会被销毁。