4

编译此代码时:

#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

我究竟做错了什么?

4

3 回答 3

15

默认情况下UNICODE在 Visual Studio 2010 中定义。调用MessageBoxA而不是使用MessageBox定义或传递宽字符串文字(L “First Win32 Program”和L “Window Title”),或者,如果您真的关心能够在没有UNICODE定义的情况下构建,在字符串文字周围使用 _T 宏: _T("First Win32 Program") (当定义 UNICODE 时,这与L "First Win32 Program" 相同,但未定义时它将是 "First Win32 Program" UNICODE)。

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

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

于 2011-03-30T03:02:01.597 回答
5

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

于 2011-03-30T03:00:49.017 回答
0

MessageboxW 需要宽字符...您可以对代码进行一些更改,然后您的代码将完美运行。解决方案一:- MessageBox(0,L"First Win32 Program",L"Window Title",MB_OK); 解决方案二。使用 MessageboxA 而不是 Messagebox。MessageboxA 将采用 ANCI 字符集中的字符。

于 2016-05-09T07:19:05.563 回答