4

このコードをコンパイルするとき:

#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 スタイルのキャスト、または関数スタイルのキャストが必要です

私は何を間違っていますか?

4

3 に答える 3

15

デフォルトUNICODEでは、Visual Studio 2010 で定義されています。defineMessageBoxAを使用する代わりに呼び出すかMessageBox、ワイド文字列リテラル ( L "First Win32 Program" およびL "Window Title") を渡すか、定義せずにビルドできることを本当に気にする場合はUNICODE、文字列リテラルの前後に _T マクロを使用します: _T("First Win32 Program") (これは、UNICODE が定義されている場合はL "First Win32 Program"と同じですが、定義さUNICODEれていない場合は "First Win32 Program" になります)。

呼び出される API の詳細UNICODEとそれがどのように影響するかについては、次のリンクを参照してください: http://msdn.microsoft.com/en-us/goglobal/bb688113.aspx . 具体的には、「Win32 Unicode アプリケーションの作成」以下のセクションです。

余談ですが、現在 Microsoft がサポートしているすべての Windows オペレーティング システムは Unicode ネイティブです。常に「ワイド」API を優先することをお勧めします。この場合、が設定されているときに定義されてMessageBoxWいるものです。_T マクロを使用し、定義せずにコンパイルする時代は過ぎ去ったはずです。MessageBoxUNICODEUNICODE

于 2011-03-30T03:02:01.597 に答える
5

UNICODE定義したのでMessageBox、ワイド文字列が必要です。

于 2011-03-30T03:00:49.017 に答える