我是win32和C ++的新手,我刚开始学习 按照在线教程编写了这段代码:
#include <windows.h>
int WINAPI WinMain(HINSTANCE hThisInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
MessageBox(NULL, (LPCWSTR) "Yes, I remember Adlestrop", (LPCWSTR) "A minimal windows program", MB_OK);
return 0;
}
但是当编译并运行代码时,在消息框中文本有点像中文... 我知道如果我没有提到正确的类型,输出可能是二进制或ASCCI或十六进制....但第一次结果是中文.. 谁能告诉我我做错了什么? ?
答案 0 :(得分:12)
您正在调用Unicode函数,但是将ASCII文本传递给。
此演员错误:
(LPCWSTR) "Yes, I remember Adlestrop"
相反,请使用L
前缀,而不是强制转换:
L"Yes, I remember Adlestrop"
使用L
作为字符串文字的前缀意味着文字将使用UTF-16 1 进行编码,并且元素类型为wchar_t
而不是char
。 Win32需要UTF-16,除非你#undef UNICODE
通常是个坏主意。
TEXT()
宏您可能会看到使用TEXT()
宏的代码。
TEXT("Yes, I remember Adlestrop")
这是一种旧方法,可以保持与Unicode可用之前编写的代码的兼容性。除非您要维护旧版应用程序,否则应避免使用TEXT()
宏,并保留UNICODE
。默认情况下,在最近版本的Visual Studio中定义UNICODE
,因此通常无需自己定义它。
1 :在Windows上。