Навигация:
<< >> Оглавление Указатель

Приложения

Приложение А. Функции, константы и структуры RDS

А.1. Типы параметров

А.1.4. Сервисные функции со строковыми параметрами и результатом

Большинство сервисных функций RDS, принимающих и возвращающих строки, существует в двух вариантах: для работы с UTF8 (функция с суффиксом «A») и для работы с UTF16 (функция с суффиксом «W»). Имя без суффикса, совпадающее с именем функции в RDS версии 1.x, для совместимости со старой версией сделано макроопределением, которое принимает значение одного из имен с суффиксом в зависимости от наличия или отсутствия дополнительного определения RDS_UTF16DEFAULT. Имена функций, не имеющих дела со строками, суффиксов не имеют.

Рассмотрим для примера сервисную функцию RDS rdsAtoI, которая преобразует переданную строку в целое число. Она существует в двух вариантах:

  int  (const char *Str,int *pRadix);
  int  (const wchar_t *Str,int *pRadix);

Функция rdsAtoIA обрабатывает строки в кодировке UTF8, функция rdsAtoIW – в кодировке UTF16. При этом в файл «RdsFunc.h» включены макроопределения следующего вида:

  #if (!defined(RDS_NO_UTFALIASES)) && (!defined(RDS_UTF16DEFAULT))#define rdsAtoI rdsAtoIA#endif
  #if (!defined(RDS_NO_UTFALIASES)) && defined(RDS_UTF16DEFAULT)#define rdsAtoI rdsAtoIW#endif

Как и в случае строковых полей структур, макроопределения констант RDS_NO_UTFALIASES и RDS_UTF16DEFAULT управляют описанием «псевдонимов» – в данном случае, для функций. Команды #define для них следует помещать в исходный текст модели перед включением файлов «RdsDef.h» и «RdsFunc.h».

Если программист хочет, чтобы по имени «rdsAtoI» вызывалась версия функции, обрабатывающая строки UTF8 (или ASCII – в части цифр, знаков препинания и латинских букв эти кодировки совпадают), то перед включением заголовков RDS никаких констант описывать не нужно:

  #include <RdsDef.h>
  #include <RdsFunc.h>int i=rdsAtoI("1234",NULL);

Если программист хочет, чтобы «rdsAtoI» вызывала версию функции, обрабатывающую строки UTF16, то перед включением заголовков RDS сдедует описать константу RDS_UTF16DEFAULT:

  #define RDS_UTF16DEFAULT
  #include <RdsDef.h>
  #include <RdsFunc.h>int i=rdsAtoI(L"1234",NULL);

(здесь префикс «L» перед строкой в кавычках указывает на то, что это строка в «расширенной» кодировке, т.е. в UTF16 при компиляции для Windows).

Если же программист вообще не хочет использовать псевдонимы функций (это затронет и псевдонимы полей служебных структур), то перед включением заголовков RDS следует описать константу RDS_NO_UTFALIASES:

  #define RDS_NO_UTFALIASES
  #include <RdsDef.h>
  #include <RdsFunc.h>int i1=rdsAtoIA("1234",NULL);
  int i2=rdsAtoIW(L"5678",NULL);

См. также

Доступ к сервисным функциям RDS.


<< >> Оглавление Указатель