我是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或十六进制...。但是第一次原来是中国人..谁能告诉我我做错了什么??
您正在调用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
定义状态。UNICODE
在最新版本的Visual Studio中默认情况下定义,因此通常无需自己定义。
1:在Windows上。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句