首页 文章

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

提问于
浏览
3

编译此代码时:

#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 回答

  • 3

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

  • 14

    默认情况下, 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 定义的情况下进行编译的日子应该已经过去了 .

  • -1

    MessageboxW期望广泛的char ...您可以对代码进行一些改动,而且代码将完美地运行 . 解决方案一: - MessageBox(0,L“First Win32 Program”,L“Window Tittle”,MB_OK);解决方案二 . 使用MessageboxA而不是Messagebox . MessageboxA将在ANCI字符集中使用char .

相关问题