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


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

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

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

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

Чтобы преобразовать приложение 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.