无法将参数从'const char [20]'转换为'LPCWSTR'

时间:2011-03-30 02:58:32

标签: c++ winapi visual-c++-2010

编译此代码时:

#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风格的转换或函数式转换

我做错了什么?

3 个答案:

答案 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。