プロが教える店舗&オフィスのセキュリティ対策術

こんにちは。
VisualStudioでマルチバイト文字セットを使用する設定のプロジェクトで、下記のように定義された文字列を wchar_t をパラメータとする関数にセットするにはどのようにすればよろしいのでしょうか?

#define _FOO "foo"

void funcA( const char* const szValue )
{
}

void funcW( const wchar_t* const szValue )
{
}

void test( void )
{
funcA( TEXT( FOO )) ; ← ok。
funcW( TEXT( FOO )) ; ← エラー。
}

UNICODE文字セットを使用する設定のプロジェクトならば問題ないのですが、マルチバイト設定ですとエラーになってしまいます。UNICODE、マルチバイト両方にプロジェクトに対応できるにはどうきじゅつすればよろしいのでしょうか。

A 回答 (3件)

> funcW( TEXT( FOO )) ; ← エラー。



funcW( (const wchar_t*)(TEXT( FOO ))) ;

ではないかな。

TEXT( FOO )がconst char *を返してるから

> funcA( TEXT( FOO )) ; ← ok。

なんですよね。
    • good
    • 0
この回答へのお礼

saijyo_739 さん、ご返答ありがとうございます。

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

お礼日時:2011/05/31 18:00

> プロジェクトがマルチバイト設定の場合に、強制的に


>
> 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++なら。
    • good
    • 0
この回答へのお礼

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

お礼日時:2011/06/01 08:43

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
}
    • good
    • 0
この回答へのお礼

episteme さん、ご返答ありがとうございます。オーバロードするというのは理解できました。もし、

#define _FOO "foo"

と定義されていた場合で記述するにはどうすればよろしいのでしょうか ?

プロジェクトがマルチバイト設定の場合に、強制的に

funcW( _FOO )

でコンパイルが通るようにしたいのですが、wchar_t に強制的に型変換したほうがよろしいでしょうか。

p.s. サンプルで書いたころに FOO は _FOO の誤りです。失礼いたしました。

お礼日時:2011/05/31 17:58

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!