質問者
PCWSTRからLPCSTRへの変換

質問
-
C++でのプログラムを書いているのですが
以下のプログラムでエラーを吐きます。
// Create the application window.
hwnd = CreateWindow(szWindowClass, TEXT(L" "), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, NULL, NULL);
エラー C2664 'HWND CreateWindowExA(DWORD,LPCSTR,LPCSTR,DWORD,int,int,int,int,HWND,HMENU,HINSTANCE,LPVOID)': 引数 2 を 'PCWSTR' から 'LPCSTR' へ変換できません。
というエラーは吐きます。このエラーを治すためにプロパティのすべての構成ですべてのプラットフォームで文字セットをマルチバイトにしてもかわらずにこのエラーを吐きます。
なにかほかに修正する方法はありますか?
すべての返信
-
このエラーを治すためにプロパティのすべての構成ですべてのプラットフォームで文字セットをマルチバイトにしてもかわらずにこのエラーを吐きます。
目指しているのは何ですか?
マルチバイト文字セットで作りたいなら、すでに指摘されているとおり、L をつけてはいけません。
Unicode 文字セットで作りたいなら、文字セットをマルチバイトにするのではなく、Unicode 文字セットに戻して、L をつけてください。
プロジェクトの設定に応じて、マルチバイト文字セット・Unicode 文字セットの両方に対応できるソースコードを書きたいなら、TEXT マクロを使ってください。(L をつけてはいけません)
(エラーを修正するために文字セットを変更する…というのが誤解の始まりです。エラーで検索して適当に試すことはやめた方が良いです。C/C++ は特に、試行錯誤で作るものではない ので…)- 編集済み AzuleanMVP, Moderator 2018年12月29日 8:13
-
マルチバイトで使いたいのであれば、 L"" ではなく、"" または TEXT("") とする必要があります。
リテラル文字列で固定するのなら、将来UNICODE/ANSIのどちらに切り替えても都合が悪くならないように TEXT("") とするのが良いと思います。具体的にはこんな感じですね。
hwnd = CreateWindow(szWindowClass, TEXT(""), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, NULL, NULL);
とっちゃん@わんくま同盟, Visual Studio and Development Technologies http://blogs.wankuma.com/tocchann/default.aspx