• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:定義した文字列を wchar_t 系の関数へ)

マルチバイト文字セットで wchar_t 系の関数にセットする方法

このQ&Aのポイント
  • VisualStudioでマルチバイト文字セットを使用する設定のプロジェクトで wchar_t をパラメータとする関数に文字列をセットする方法について説明します。
  • マルチバイト設定では、wchar_t 系の関数に文字列を渡すとエラーが発生しますが、UNICODE文字セットを使用すれば問題ありません。
  • プロジェクトがマルチバイト設定の場合でも、UNICODEとマルチバイトの両方に対応する方法があります。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

> funcW( TEXT( FOO )) ; ← エラー。 funcW( (const wchar_t*)(TEXT( FOO ))) ; ではないかな。 TEXT( FOO )がconst char *を返してるから > funcA( TEXT( FOO )) ; ← ok。 なんですよね。

TeijigoTeatime
質問者

お礼

saijyo_739 さん、ご返答ありがとうございます。 強制的に型を変換する方法ですね。これならうまくいきそうです。 いろいろ試してみます。ありがとうございます。

その他の回答 (2)

回答No.3

> プロジェクトがマルチバイト設定の場合に、強制的に > > funcW( _FOO ) > > でコンパイルが通るようにしたいのですが、wchar_t に強制的に型変換したほうがよろしいでしょうか。 なにがしたいのかさっぱりわからんです。 #define _FOO "foo" なんだから funcW(_FOO) が通るなら void funcW(const char* szValue) ってことでしょ。 だったら void funcW(const char* szValue) { ... } と void funcW(const wchar_t* szValue) { ... } を定義しとけばいいんでないの? C++なら。

TeijigoTeatime
質問者

お礼

episteme さん、ご返答ありがとうございます。 うまく説明できてなかったようで申し訳ありません。 C++自体の理解が足りなかったようです。 関数のオーバロードでいろいろ試してみます。 ありがとうございます。

回答No.1

C++ なら関数オーバロードで: void func( const char* const szValue ) // char-version { } void func( const wchar_t* const szValue ) // wchar_t-version { } void test( void ) { func("FOO") ; // char-version called func(L"FOO"); // wchar_t-version called }

TeijigoTeatime
質問者

お礼

episteme さん、ご返答ありがとうございます。オーバロードするというのは理解できました。もし、 #define _FOO "foo" と定義されていた場合で記述するにはどうすればよろしいのでしょうか ? プロジェクトがマルチバイト設定の場合に、強制的に funcW( _FOO ) でコンパイルが通るようにしたいのですが、wchar_t に強制的に型変換したほうがよろしいでしょうか。 p.s. サンプルで書いたころに FOO は _FOO の誤りです。失礼いたしました。

関連するQ&A