Unicode アプリケーション

次の 2 つの方法のいずれかで、アプリケーションを Unicode アプリケーションとして再コンパイルできます。

  • アプリケーションの Sqlucode.h ヘッダー ファイルに含まれる Unicode #define を含めます。

  • コンパイラの Unicode オプションを使用してアプリケーションをコンパイルします。 (このオプションは、コンパイラによって異なります)。

ANSI アプリケーションを Unicode アプリケーションに変換するには、Unicode データを格納して渡すアプリケーションを記述します。 さらに、SQLPOINTER 引数をサポートする関数の呼び出しは、バイト数を使用するように変換する必要があります。

アプリケーションが Unicode アプリケーションとしてコンパイルされた後、アプリケーションが ODBC API 関数 (サフィックスなし) を呼び出した場合、ドライバー マネージャーはアプリケーションを Unicode アプリケーションとして認識し、基になるドライバーが Unicode をサポートしている場合は、関数呼び出しを Unicode 関数 (W サフィックス付き) に変換します。 ANSI アプリケーションがサフィックスなしで関数呼び出しを行うと、基になるドライバーが ANSI をサポートしている場合、ドライバー マネージャーによって ANSI に変換されます。 アプリケーションとドライバーの両方が同じ文字エンコードをサポートしている場合、ドライバー マネージャーはドライバーに呼び出しを渡します (ANSI アプリケーションの特定の例外を除く)。

アプリケーションは、Unicode 関数 (W サフィックス付き) と ANSI 関数 (A サフィックスの有無にかかわらず) の両方を呼び出すことができます。 Unicode 関数呼び出しと ANSI 関数呼び出しを混在させることができます。 ただし、カーソル ライブラリを使用する場合は、Unicode 関数呼び出しと ANSI 関数呼び出しを混在させることはできません。 カーソル ライブラリは Unicode または ANSI のいずれかであり、組み合わせではありません。

アプリケーションは、Unicode アプリケーションまたは ANSI アプリケーションとしてコンパイルできるように記述できます。 この場合、文字データ型は SQL_C_TCHAR として宣言できます。 これは、アプリケーションが Unicode アプリケーションとしてコンパイルされた場合に SQL_C_WCHAR を挿入するマクロ、または ANSI アプリケーションとしてコンパイルされた場合に SQL_C_CHAR を挿入するマクロです。 アプリケーションが ANSI であるか Unicode であるかによって長さ引数のサイズが (文字列データ型の場合) 変わるため、アプリケーション プログラマは、引数として SQLPOINTER を取る関数に注意する必要があります。

関数は、Unicode のみの関数呼び出し (W サフィックス付き)、ANSI のみの関数呼び出し (A サフィックス付き)、またはサフィックスなしの ODBC 関数呼び出しの 3 つの方法のいずれかで呼び出すことができます。 関数の 3 つの形式の引数は同じです。 文字列を指す SQLCHAR * 引数または SQLPOINTER 引数を持つ関数にのみ、Unicode および ANSI 形式が必要です。 SQLBindColSQLGetData (Unicode および ANSI 形式を持たない) などの文字型として宣言できる引数を持つ関数の場合、引数は Unicode 型、ANSI 型、または C 型引数の場合は SQL_C_TCHAR マクロとして宣言できます。 詳細については、「Unicode データ」を参照してください。

使用できる Unicode ドライバーがない場合でも、アプリケーションを Unicode アプリケーションとして記述できます。 ドライバー マネージャーは、Unicode 関数とデータ型を ANSI にマップします。 実行できる Unicode から ANSI へのマッピングには、いくつかの制限があります。 使用する Unicode アプリケーション用の Unicode ドライバーが存在すると、パフォーマンスが向上し、Unicode から ANSI へのマッピングに固有の制限が削除されます。