PCWSTRからLPCSTRへの変換

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら

トピックに返信する


答えを正確にご入力ください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[flash]: OFF
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: PCWSTRからLPCSTRへの変換

Re: PCWSTRからLPCSTRへの変換

#5

by 結城紬 » 5年前

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

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

Re: PCWSTRからLPCSTRへの変換

#4

by YuO » 5年前

taketori7616 さんが書きました:
5年前

コード:

 // 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などがあります。

Re: PCWSTRからLPCSTRへの変換

#3

by dic » 5年前

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

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

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

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

Re: PCWSTRからLPCSTRへの変換

#2

by 結城紬 » 5年前

taketori7616 さん、こんにちは。

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

PCWSTRからLPCSTRへの変換

#1

by taketori7616 » 5年前

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をとって""だけにしてもダメでした。

ページトップ