编译此代码时:
#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&gt;指向的类型是无关的;转换需要reinterpret_cast,C风格的转换或函数式转换
我做错了什么?
答案 0 :(得分:14)
默认情况下,{Visual Studio 2010中定义了UNICODE
。要么调用MessageBoxA
而不是使用MessageBox
定义,要么传递一个宽字符串文字( L “第一个Win32程序“和 L ”窗口标题“)或者,如果您真的关心能够在没有定义UNICODE
的情况下构建,请在字符串文字周围使用_T宏:_T(”First Win32程序“)(这与定义UNICODE时的 L ”First Win32 Program“相同,但是当未定义UNICODE
时它将是”First Win32 Program“。
有关UNICODE
及其如何影响API调用的详细信息,请参阅以下链接:http://msdn.microsoft.com/en-us/goglobal/bb688113.aspx。具体来说,“创建Win32 Unicode应用程序”下面的部分。
旁注:Microsoft支持的所有Windows操作系统都是Unicode原生的。我建议总是喜欢“广泛”的API。在这种情况下,MessageBoxW
,即MessageBox
被设置为UNICODE
时定义的内容。使用_T宏并在没有定义UNICODE
的情况下编译的日子应该在我们身后。
答案 1 :(得分:3)
您已定义UNICODE
,因此MessageBox
需要一个宽字符串。
答案 2 :(得分:0)
MessageboxW需要广泛的char ...您可以对代码进行一些更改,而且代码将完美地运行。 解决方案一: - MessageBox(0,L“First Win32 Program”,L“Window Tittle”,MB_OK); 解决方案二。使用MessageboxA而不是Messagebox。 MessageboxA将在ANCI字符集中使用char。