Unicode 应用程序

可以通过以下两种方式之一将应用程序重新编译为 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 函数调用(无后缀)。 函数的三种形式的自变量是相同的。 只有那些具有 SQLCHAR * 自变量或指向字符串的 SQLPOINTER 自变量的函数需要 Unicode 和 ANSI 形式。 对于具有可声明为字符类型的自变量的函数,例如 SQLBindCol 或 SQLGetData(没有 Unicode 和 ANSI 形式),可以将该自变量声明为 Unicode 类型、ANSI 类型,或者在 C 类型参数的情况下,声明为 SQL_C_TCHAR 宏。 有关详细信息,请参阅 Unicode 数据

即使没有 Unicode 驱动程序可供其使用,应用程序也可以编写为 Unicode 应用程序。 驱动程序管理器会将 Unicode 函数和数据类型映射到 ANSI。 可以执行的 Unicode 到 ANSI 映射存在一些限制。 Unicode 应用程序要使用的 Unicode 驱动程序的存在将导致更好的性能,并消除 Unicode 到 ANSI 映射固有的限制。