Поделиться через


Приложения на базе Юникода

Вы можете перекомпилировать приложение в качестве приложения Юникода одним из двух способов:

  • Включите в приложение #define Юникод, содержащийся в файле заголовка Sqlucode.h.

  • Скомпилируйте приложение с параметром Юникода компилятора. (Этот параметр будет отличаться для разных компиляторов.)

Чтобы преобразовать приложение ANSI в приложение Юникода, напишите приложение для хранения и передачи данных Юникода. Кроме того, вызовы функций, поддерживающих аргументы SQLPOINTER, необходимо преобразовать для использования количества байтов.

После компиляции приложения в виде приложения Юникода, если приложение вызывает функцию API ODBC (без суффикса), диспетчер драйверов распознает приложение как приложение Юникода и преобразует вызов функции в функцию Юникода (с суффиксом W ), если базовый драйвер поддерживает Юникод. Когда приложение ANSI вызывает функцию без суффикса, диспетчер драйверов преобразует его в ANSI, если базовый драйвер поддерживает ANSI. Если приложение и драйвер поддерживают одинаковую кодировку символов, диспетчер драйверов передает вызовы драйверу (с определенными исключениями для приложений ANSI).

Приложение может вызывать функции Юникода (с суффиксом W) и функциями ANSI (с суффиксом A или без нее). Вызовы функций Юникода и ANSI могут быть смешанными. Однако если используется библиотека курсоров, вызовы функций Юникода и ANSI не могут быть смешанными. Библиотека курсоров — Юникод или ANSI, а не смесь.

Приложение можно написать таким образом, чтобы его можно было скомпилировать как приложение Юникода или приложение ANSI. В этом случае типы данных символов можно объявить как SQL_C_TCHAR. Это макрос, который вставляет SQL_C_WCHAR, если приложение компилируется как приложение Юникода или вставляет SQL_C_CHAR, если он компилируется как приложение ANSI. Программист приложений должен быть осторожным с функциями, которые принимают SQLPOINTER в качестве аргумента, так как размер аргумента длины изменится (для строковых типов данных) в зависимости от того, является ли приложение ANSI или Юникод.

Функция может вызываться одним из трех способов: как вызов функции только для Юникода (с суффиксом W ), как вызов функции только ANSI (с суффиксом A ) или как вызов функции ODBC без суффикса. Аргументы трех форм функции идентичны. Только эти функции с аргументами SQLCHAR * или аргументами SQLPOINTER, указывающими на строки, требуют формы Юникода и ANSI. Для функций с аргументами, которые могут быть объявлены как тип символа, например SQLBindCol или SQLGetData (которые не имеют форм Юникода и ANSI), аргумент можно объявить как тип Юникода, тип ANSI или в случае аргумента типа C, макрос SQL_C_TCHAR. Дополнительные сведения см. в разделе "Данные Юникода".

Приложение может быть записано как приложение Юникода, даже если для работы с ним нет драйверов Юникода. Диспетчер драйверов сопоставляет функции и типы данных Юникода с ANSI. Существуют некоторые ограничения для Юникода для сопоставлений ANSI, которые можно выполнить. Существование драйвера Юникода для приложения Юникода для работы приведет к повышению производительности и приведет к удалению ограничений, присущих сопоставлениям Юникода с ANSI.