C++ 为什么我的简单C++;GUI应用程序是否以中文显示消息框?

C++ 为什么我的简单C++;GUI应用程序是否以中文显示消息框?,c++,winapi,C++,Winapi,哦,至于整个(LPCWSTR)铸造的事情:除非我把它们放进去,否则它不会编译。它给了我以下错误消息: 错误1错误C2664:“MessageBoxW”:无法将参数2从“const char[22]”转换为“LPCWSTR” 我强烈猜测您的源文件的编码是错误的。您能否检查它是否以某种Unicode格式保存,最有可能是UTF-16?在字符串前面加一个L,使其成为宽字符串。“再见残酷的世界” 那你就不需要演员了 您还可以使用文本(“”)宏,该宏将根据您的配置设置创建unicode字符串或ascii字符

哦,至于整个(LPCWSTR)铸造的事情:除非我把它们放进去,否则它不会编译。它给了我以下错误消息:

错误1错误C2664:“MessageBoxW”:无法将参数2从“const char[22]”转换为“LPCWSTR”


我强烈猜测您的源文件的编码是错误的。您能否检查它是否以某种Unicode格式保存,最有可能是UTF-16?

在字符串前面加一个L,使其成为宽字符串。“再见残酷的世界”

那你就不需要演员了

您还可以使用文本(“”)宏,该宏将根据您的配置设置创建unicode字符串或ascii字符串


您看到中文的原因是MessageBox将ascii字符串解释为unicode。

您已经有了答案,但这是一个很好的例子,说明了为什么您应该使用避免强制转换。是的,强制转换将使您的代码得以编译,但除非您了解发生了什么,否则很可能您刚刚创建了一个bug

一般来说,我的3个铸造规则是:

  • 不要强制转换(修复代码)
  • 不要施法(调整你的类型以停止需要施法)
  • 好的,演员,但明天再考虑你的决定,看看你能不能做1或2

  • 我不知道为什么,但你的问题标题让我很惊讶我想知道这些字是什么意思…它是垃圾中文,意思是它没有任何意义。你懂不懂?一般来说,不要为了满足编译器而强制转换。如果你认为你需要写一个演员表,你应该确切地知道演员表将做什么以及为什么它是必要的。如果您不知道,请寻求帮助。我不知道您使用的是什么IDE,但您应该在“另存为…”对话框中或菜单中的某个位置具有“字符集”选项。是的。与世界其他地方不同,微软通过UTF-8编码实现Unicode,因此普通的ol'ASCII字符可以正常工作,微软决定完成整个WCHAR UTF-16。它使代码变得非常不可移植,并将其锁定在Microsoft世界中,这当然是他们想要的。(有很多方法可以解决这个问题,但对于新手程序员来说并不明显。)UTF-8在NT创建时并不存在(这就是他们使用的借口),你可能可以找到一篇关于它的帖子@