可能重复:
Why does my simple C++ GUI application show a message box in Chinese?
我在Visual C ++中实现了以下代码块:
int nResult=MessageBox(NULL,
(LPCWSTR)"An example of Cancel,Retry,Continue",
(LPCWSTR)"Message Box!",
MB_ICONWARNING|MB_ABORTRETRYIGNORE);
但是,无论我尝试什么,它总是会显示一个中文消息框!因此,我只是想问一下我的问题的解决方案以及为什么这里有中文信息。谢谢你!
答案 0 :(得分:10)
您忘记在字符串文字前面放置'L'。修改如下:
int nResult=MessageBox(NULL,
L"An example of Cancel,Retry,Continue",
L"Message Box!",
MB_ICONWARNING|MB_ABORTRETRYIGNORE);
在C ++中,unicode字符串文字以L
为前缀。如果你没有放置前缀,那么转换为'unicode string constant'将无济于事并导致错误地解释内存位置。
答案 1 :(得分:5)
您期望从一种类型转换为另一种类型的指针以更改指向的值。这不是C ++演员所做的。它们只是告诉编译器假设指针指向新类型。要指定wide literal,请在引号前使用L
(如果编译器支持,则使用new string literals)。摆脱演员阵容,只是掩盖了这个错误。
答案 2 :(得分:4)
正如大卫所说,你已经将ASCII字符串转换为UNICODE字符串。请改用_TEXT(“你的字符串”)宏。
您不能将ASCII字节解释为UNICODE字符串,否则会发生错误。
编辑:此外,如果您想要ASCII字符串,您可以在项目设置中显式调用MessageBoxA()或更改为多字节字符设置。