C++ アプリケーションの Unicode 対応
C++ 用 Unicode:インデックス への移動
デフォルト文字列が Unicode であるため、RAD Studio フレームワークおよびライブラリを使用するいずれの C++ コードも、Unicode 対応でなければなりません。開発者はコードが、ナロー文字列とワイド文字列を両方とも、[_TCHAR のマップ先] オプション([プロジェクト|オプション...|C++(共有オプション)]ダイアログ ボックス内)を使用して正確に処理できるようにしておく必要があります。
wchar_t
に設定され、_tmain(...)
エントリ ポイント(main
にマップされる)が含まれています。_TCHAR マッピングが設定された C++ アプリケーションは、自動的に正しいマップ関数を使用します。目次
C++ における Unicode 関連の問題
C++ には、Delphi を使用した場合には発生しない Unicode に関連する固有の問題があります。 これらの問題は、RAD Studio フレームワークやライブラリが Unicode 文字列を使用している際に、C++ RTL および Windows API がデフォルトでナロイングされることに起因します。問題の一部について以下で説明します。
RAD Studio フレームワーク、ライブラリ、C++ RTL の利用
RAD Studio フレームワークおよびライブラリは、Unicode を使用しており、それに対して C++ RTL はデフォルトでナロー型ですが、ワイド文字列とナロー文字列の両方のルーチンを含んでいます(「マップ関数」を参照)。 そのため、RAD Studio フレームワークおよびライブラリを使用するアプリケーションではワイド用の C++ RTL 関数を使用する必要があります。 ワイド文字列を使う必要があるアプリケーションで C++ RTL を使用するには、以下を行う必要があります:
- _TCHAR のマップ先 を
wchar_t
に設定し、コード内で _TCHAR を使用する。 - C++ RTL メンバの "マップ" 版を使用する(例:
strcpy
ではなく_tcscpy
を使用する)。 「マップ関数」のリストを参照してください。
Windows API の使用
通常、Windows API はデフォルトではナロー型です。 この場合、[_TCHAR のマップ先]オプションが非常に役立ちます。ただし、RAD Studio フレームワークおよびライブラリを使用しない C++ アプリケーションでは、デフォルトでこのオプションがオフになっています([char]
に設定されています)。
RAD Studio フレームワークおよびライブラリを使用しない C++ アプリケーションで Windows API を使用する場合、明示的に[TCHAR のマップ先]オプションを wchar_t
に設定しなければなりません([プロジェクト|オプション...|C++(共有オプション)] ダイアログ ボックス内)。
文字列定数の受け渡し
文字列定数("string constant" など)はナロー型(char*
)のままであるため、PChar を取る、RAD Studio フレームワークおよびライブラリの関数に以前のように渡すことができません。 次のように定数の頭に L をつけると、定数を、PChar パラメータで RAD Studio フレームワークおよびライブラリの関数に渡すことができます:
L"文字列定数"
[_TCHAR のマップ先]を[wchar_t]
に設定し、_TEXT マクロまたは _T マクロを使用した場合は、この変換が自動的に行われます。これについては「_TCHAR のマッピングMapping」で説明しています。
コード ページの設定
AnsiString 型のコード ページは、AnsiStringT<コード ページ> を使って設定できます。
Delphi と同じ次の事前定義型が利用できます。
- AnsiString は
AnsiStringT<0>
です。 - UTF8String は
AnsiStringT<65005>
、UTF8 コード ページです。 - RawByteString は
AnsiStringT<0xFFFF>
です。