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

Rol*_*ink 3 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);
    }
Run Code Online (Sandbox Code Playgroud)

我收到编译器错误:

错误C2664:'MessageBoxW':无法将参数2从'const char [20]'转换为'LPCWSTR'1>指向的类型不相关; 转换需要reinterpret_cast,C风格的转换或函数式转换

我究竟做错了什么?

Pet*_*ene 14

默认情况下UNICODE,在Visual Studio 2010中定义.调用MessageBoxA而不是使用MessageBoxdefine或传递宽字符串文字(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应用程序"下面的部分.

另请注意:Microsoft支持的所有Windows操作系统都是Unicode原生的.我建议总是喜欢"广泛"的API.在这种情况下,MessageBoxWMessageBox是定义为何时UNICODE设置的内容.使用_T宏和UNICODE未定义的编译的日子应该在我们身后.


Pup*_*ppy 5

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