无法将参数从“const char \[20\]”转换为“LPCWSTR”

新手上路,请多包涵

编译此代码时:

 #include <windows.h>

int WINAPI WinMain(HINSTANCE hInsance,HINSTANCE hPrevInstance,PSTR cmdLine,int showCmd){
    MessageBox(0,"First Win32 Program","Window Tittle",MB_OK);
    }

我得到编译器错误:

错误 C2664:“MessageBoxW”:无法将参数 2 从“const char [20]”转换为“LPCWSTR”1> 指向的类型不相关;转换需要 reinterpret_cast、C-style cast 或 function-style cast

我究竟做错了什么?

原文由 Rolilink 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

您已经定义了 UNICODE ,所以 MessageBox 期待一个宽字符串。

原文由 Puppy 发布,翻译遵循 CC BY-SA 2.5 许可协议

By default, UNICODE is defined in Visual Studio 2010. Either call MessageBoxA() instead of using the MessageBox() define, or pass a wide string literal ( L"First Win32 Program"L"Window Title" )。或者,如果您真的关心能够在没有定义 UNICODE 的情况下进行构建,请在字符串文字周围使用 TEXT() 宏: TEXT("First Win32 Program") (这与 L"First Win32 Program"UNICODE 被定义,但它会是 "First Win32 Program"UNICODE 未定义22225903

有关 UNICODE 以及它如何影响调用的 API 的更多信息,请参阅 http://msdn.microsoft.com/en-us/goglobal/bb688113.aspx 。具体来说,“创建 Win32 Unicode 应用程序”下面的部分。

附带说明:今天微软支持的所有 Windows 操作系统都是 Unicode 原生的。我建议始终支持“宽”API。在这种情况下, MessageBoxW() ,即 MessageBox() 被定义为当设置 UNICODE 时。使用 TEXT() 宏和编译没有定义 UNICODE 的日子应该已经过去了。

原文由 Peter Huene 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题