次の方法で共有


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を挿入するマクロです。 アプリケーションのプログラマは、SQLPOINTER を引数として受け取る関数に注意する必要があります。長さ引数のサイズは、アプリケーションが ANSI か Unicode かに応じて (文字列データ型の場合) 変更されるためです。

関数は、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 へのマッピングに固有の制限が削除されます。