_TCHAR マッピング

提供: RAD Studio
移動先: 案内検索

C++ 用 Unicode:インデックス への移動


C++Builder の _TCHAR マッピングは、ワイド文字列またはナロー文字列のいずれかと一緒に使われるソース コードの記述を簡単にすることを目的としています。 RAD Studio フレームワークおよびライブラリ、または Windows API で必要な適切な文字列型がコードで使用され、RTL の使用:インデックス 関数が適切な定義(それぞれ、ワイド型またはナロー型)に設定されるように、_TCHAR を wchar_t または char のいずれかにマップできます。 [_TCHAR のマップ先]オプションを設定するには、[プロジェクト|オプション...|C++(共有オプション)] ダイアログ ボックスを使用します。

C++ アプリケーションでは、ワイド文字列とナロー文字列の両方を扱う必要があります。

  • C++ RTL には、charwchar_t の両方のために設計されたルーチンがあります。
  • Windows API は通常はナロー型なので、char が必要になります。
  • RAD Studio フレームワークおよびライブラリでは、ワイド文字列データ(Unicode)を使用しているため、wchar_t が必要になります。

RAD Studio フレームワークおよびライブラリとのやり取りでは、ワイド RTL 関数を使用するか、RAD Studio フレームワークおよびライブラリにデータを渡す前に適切な変換を行う必要があります。 (「UTF-8 変換ルーチン」を参照)。

_TCHAR は、tchar.h ヘッダー ファイルで条件付きで宣言されており、char または wchar_t のいずれかにマッピングされる typedef(エイリアス)として定義されています。 移植性のあるコード(C++ RTL、Windows API、RAD Studio フレームワークおよびライブラリなどとやり取りできるコード)を記述した場合は、_TCHAR を使用しなければなりません(データ型 charwchar_t をハード コーディングする代わりに)。そして、[_TCHAR のマップ先]オプションを[char]または[wchar_t]に設定します([C++(共有オプション)]ページ)。 たとえば、現在の _TCHAR マッピング設定は、アプリケーションが RTL マップ関数のANSI バージョンを使用するか、ワイド バージョンを使用するかを制御します。

[_TCHAR のマップ先]オプション

プロジェクト オプション[_TCHAR のマップ先]では、コードにおける _TCHAR のマップ定義を制御します。
_TCHAR は、次の表に示すように、char または wchar_t にマッピングすることができます。

[_TCHAR のマップ先]オプションの値

CHAR
_TCHARchar に置き換えます。

メモ: このオプションは、標準ライブラリおよび API 関数のワイド定義には適用されません。

wchar_t
  • _TCHARwchar_t に置き換えます。
  • UNICODE および _UNICODE のマクロ定数を設定します。
  • 標準ライブラリおよび API 関数のワイド定義に適用されます。


[ディレクトリと条件定義]ページの[_TCHAR のマップ先]オプションの設定

[プロジェクト|オプション...|C++(共有オプション)ダイアログ ボックスを使用します。

RAD Studio フレームワークおよびライブラリには、[_TCHAR のマップ先]を[wchar_t]に設定

RAD Studio フレームワークおよびライブラリは Unicode で実装されており、常に Unicode の使用が想定されています。デフォルトで _TCHAR は wchar_t にマッピングされます。

たとえば次のコードは、[_TCHAR のマップ先]オプションを[wchar_t]に設定しないとコンパイルが成功しません。

TResourceStream* res =  new
    TResourceStream(HInstance, ResourceId, RT_RCDATA);

[_TCHAR のマップ先]オプションが[char]に設定されていると、RT_RCDATAchar* にマッピングされます。 RAD Studio フレームワークおよびライブラリは wchar_t* を想定しているため、RAD Studio フレームワークおよびライブラリを利用する場合、 char の設定では問題が発生します。

[_TCHAR のマップ先]を[wchar_t]にするために必要なコード変更

[_TCHAR のマップ先]を[wchar_t](デフォルト)に設定した場合、プロジェクトには _tmain または _tWinMain というエントリ ポイントが必要になります。 C++Builder を使用して作成した新規プロジェクトは、デフォルトでこのエントリ ポイントを持っています。ただし、インポートしたプロジェクトの場合は、このエントリ ポイントを手動で追加する必要があるかもしれません。

tchar.h ヘッダー ファイルをインクルードする必要もあります。これには必要なエントリ ポイントとマップ定義が含まれます。 tchar.h に含まれるマップ関数の一覧は、「マップ関数」を参照してください。

メモ: _tmain ではなく main をエントリ ポイントに使用すると、リンカは実行可能ファイルをリンクできません。 RAD Studio フレームワークおよびライブラリを使用する新規プロジェクトでは、ウィサードによって自動的に _tmain エントリ ポイントが挿入されます。

テキスト リテラル前での _TEXT マクロの使用

文字リテラルと文字列リテラルを ANSI または Unicode に正しくマッピングできるようにするには、_TEXT マクロか _T マクロのどちらかを使用します。 例:

::MessageBox(0, _TEXT("The message"), _TEXT("The caption"), MB_OK);

_UNICODE が定義されていると、_TEXT(または _T)マクロはリテラル文字列(文字)を先頭に L を付けた形式に変換します。それ以外の場合、_TEXTL 接頭辞を付けずにリテラルを変換します。 たとえば、_UNICODE を定義して次のように記述すると、

_TEXT("The message")

次のように先頭に L を付けた形式に変換されます。

L"The message"

それ以外の場合、このマクロは L 接頭辞を付けず、次のように変換します。

"The message"

関連項目