PCWSTRからLPCSTRへの変換

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
taketori7616
記事: 1
登録日時: 8ヶ月前

PCWSTRからLPCSTRへの変換

#1

投稿記事 by taketori7616 » 8ヶ月前

vs2017でC++のアプリを作っているときに、以下のプログラムでエラーが出てしまいます。

コード:

 // Create the application window.
	hwnd = CreateWindow(szWindowClass, 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' へ変換できません。	UNBROKEN_ AbcCalibrator	

上記のエラーがでてしまいます。いろいろ調べて、プロパティの「すべての構成」「すべてのプラットフォーム」での文字セットを「マルチバイト文字セットを使用する」に変更してみてもダメでした。

コード:

L""
の部分はLPCSTR形式に変更できるのでしょうか?
L""のLをとって""だけにしてもダメでした。

結城紬
記事: 42
登録日時: 2年前

Re: PCWSTRからLPCSTRへの変換

#2

投稿記事 by 結城紬 » 8ヶ月前

taketori7616 さん、こんにちは。

そもそもの問題として、taketori7616 さんが貼り付けたコードと、エラーが発生したコードは違うもの、もしくは違う場所ですね?
貼り付けたコードは CreateWindow ですが、エラーは CreateWindowEx で発生しています。
ちゃんとエラーの内容とエラーが発生したコードを合わせていただかないと、回答できませんのでよろしくお願いします。
また、設定を変更したとのことですが、エラーの内容は設定を変更する前のものか、後のものかも正確に記述ください。

dic
記事: 561
登録日時: 9年前
住所: 宮崎県

Re: PCWSTRからLPCSTRへの変換

#3

投稿記事 by dic » 8ヶ月前

taketori7616さんのコードをVisual Stduio 2017 Community で
新規作成して、テンプレートが展開されたコードに移しましたところ
ビルドは成功し、実行もできました。
プロパティはいじっておりません。

関係がありそうなのは
CreateWindow(szWindowClass,
の szWIndowClass の型と L"" の型が一致しているかどうかでは
ないでしょうか?

VC++2017が出力したコードは
WCHAR szWindowClass[MAX_LOADSTRING]; // メイン ウィンドウ クラス名
でした。

持っているソースコードを公開しても問題ないようにして
全部あげてみてはどうでしょうか?

YuO
記事: 940
登録日時: 8年前
住所: 東京都世田谷区

Re: PCWSTRからLPCSTRへの変換

#4

投稿記事 by YuO » 8ヶ月前

taketori7616 さんが書きました:
8ヶ月前

コード:

 // Create the application window.
	hwnd = CreateWindow(szWindowClass, 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' へ変換できません。	UNBROKEN_ AbcCalibrator	
エラーで書かれているのはCreateWindowExの第2引数なので,CreateWindowの第1引数が間違っています。
szWindowClassの型がLPCWSTR(const wchar_t *)になっていませんか。

コード:

LPCTSTR szWindowClass = TEXT("xxxxx");
のように,LPCTSTR型にするとよいかと。
CreateWindowはCreateWindowExを呼び出すマクロとして定義されています。
ref) CreateWindowA macro, CreateWindowW macro
同様の例は,DialogBoxParamを呼び出すDialogBoxなどがあります。

結城紬
記事: 42
登録日時: 2年前

Re: PCWSTRからLPCSTRへの変換

#5

投稿記事 by 結城紬 » 8ヶ月前

YuO さんが書きました:
8ヶ月前
CreateWindowはCreateWindowExを呼び出すマクロとして定義されています。
おおっと、今はそうだったのですか。これは失礼しました。
いつの間にAPIが変更されたのでしょうね。こんなわかりにくい変更をされたら初心者が混乱するのも無理はないです。

> taketori7616 さん
CreateWindow の引数を変更するのも良いですが、CreateWindow は古いAPIですので、CreateWindowEx を使うほうがより良い解決と思います。

返信

“C言語何でも質問掲示板” へ戻る