编译此代码时:
#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风格的转换或函数式转换
我究竟做错了什么?
3 回答
你已经定义了
UNICODE
,所以MessageBox
期待一个宽字符串 .默认情况下,
UNICODE
在Visual Studio 2010中定义 . 要么调用MessageBoxA
而不是使用MessageBox
定义或传递宽字符串文字( L "First Win32 Program"和 L "Window Title"),或者,如果您真的关心能够在没有定义UNICODE
的情况下构建,请使用_T字符串文字周围的宏:_T("First Win32 Program")(这与定义UNICODE时的 L "First Win32 Program"相同,但未定义UNICODE
时为"First Win32 Program") .有关
UNICODE
以及它如何影响调用API的更多信息,请参阅以下链接:http://msdn.microsoft.com/en-us/goglobal/bb688113.aspx . 具体来说,以下部分为"Creating Win32 Unicode Applications" .另请注意:Microsoft支持的所有Windows操作系统都是Unicode原生的 . 我建议始终支持"wide" API . 在这种情况下,
MessageBoxW
,这是MessageBox
被设置为UNICODE
时的定义 . 使用_T宏并在没有UNICODE
定义的情况下进行编译的日子应该已经过去了 .MessageboxW期望广泛的char ...您可以对代码进行一些改动,而且代码将完美地运行 . 解决方案一: - MessageBox(0,L“First Win32 Program”,L“Window Tittle”,MB_OK);解决方案二 . 使用MessageboxA而不是Messagebox . MessageboxA将在ANCI字符集中使用char .