Текущий раздел:

Описания RDS

Приложения

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

А.5. Сервисные функции и макросы RDS

А.5.2. Управление работой RDS и функции общего назначения

А.5.2.4. Макрос RDS_INTVERSION – преобразование версии RDS в целое число

# Приложения

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

### А.5. Сервисные функции и макросы RDS

#### А.5.2. Управление работой RDS и функции общего назначения

##### А.5.2.4. Макрос RDS_INTVERSION – преобразование версии RDS в целое число

Макрос RDS_INTVERSION преобразует три компонента версии RDS (старший номер, младший номер и номер сборки) в одно целое число, которое можно использовать для сравнения версий.

      RDS_INTVERSION(
        high,  // Старший номер
        low,   // Младший номер
        build  // Номер сборки
      )

Определение

      #define RDS_INTVERSION(high,low,build) \
          (((high)<<24) | ((low)<<16) | (build))

Параметры

high(Целое число: unsigned char, int, DWORD и т.п.)
  Старший номер версии – самое первое число в трехкомпонентном названии версии (например, в названии версии «1.0.261» старший номер равен 1). Это число занимает один байт и может принимать значения от 0 до 127. Более поздние версии RDS имеют больший старший номер.
low(Целое число)
  Младший номер версии – второе число в трехкомпонентном названии версии (например, в названии версии «1.0.261» младший номер равен 0). Это число занимает один байт и может принимать значения от 0 до 255. При одинаковых старших номерах версий более поздние версии RDS имеют больший младший номер.
build(Целое число)
  Номер сборки – последнее число в трехкомпонентном названии версии (например, в названии версии «1.0.261» номер сборки равен 261). Это число занимает два байта и может принимать значения от 0 до 65535. При одинаковых старших и младших номерах версий более поздние версии RDS имеют больший номер сборки.

Возвращаемое значение

Целое тридцатидвухбитное число, соответствующее переданным компонентам номера версии.

Примечания

Макрос RDS_INTVERSION формирует из трех компонентов номера версии одно целое число сдвигом влево старшего номера на 24 бита, младшего – на 16 бит, и объединения получившихся чисел операцией битового ИЛИ с номером сборки. Именно в таком формате номер версии RDS возвращается сервисной функцией rdsServiceVersion. Числа в этом формате можно сравнивать: если число, полученное при помощи макроса RDS_INTVERSION из одной версии больше числа, полученного из другой, значит, первая версия новее второй.

Помимо макроса RDS_INTVERSION в файле «RdsDef.h» определено четыре константы, описывающих текущую, то есть соответствующую времени создания «RdsDef.h», версию RDS:

RDS_FVERSIONHIGH | Старший номер текущей версии RDS.
RDS_FVERSIONLOW | Младший номер текущей версии RDS.
RDS_FVERSIONBUILD | Номер сборки текущей версии RDS.
RDS_FVERSION | Полный номер текущей версии RDS (число, полученное из трех компонентов версии указанным выше образом).
RDS_STRVERSIONA | Полный номер текущей версии RDS в виде строки ASCII/UTF8 (например, "1.0.261").
RDS_STRVERSIONW | Полный номер текущей версии RDS в виде строки UTF16 (например, L"1.0.261").

Описания этих констант можно, при необходимости, отключить, описав константу RDS_NOVERSIONDEFINES перед включением файла «RdsDef.h».

Пример

      #include <windows.h>
      #include <RdsDef.h>
      // Подготовка описаний сервисных функций
      #define RDS_SERV_FUNC_BODY GetInterfaceFunctions
      #include <RdsFunc.h>
      // Главная функция DLL
      int WINAPI DllMain(HINSTANCE /*hinst*/,
                               unsigned long reason,
                               void* /*lpReserved*/)
      { if(reason==DLL_PROCESS_ATTACH) // Загрузка DLL
          { int version;
            // Получение доступа к функциям
            GetInterfaceFunctions();
            // Проверка наличия функции получения версии
            if(rdsServiceVersion==NULL) // Нет функции
              { MessageBoxA(NULL,"This DLL needs RDS to work","Error",MB_OK);
                return 1;
              }
            // Получение версии RDS
            version=rdsServiceVersion();
            if(version<RDS_INTVERSION(1,0,120))
              MessageBoxA(NULL,"RDS version must be 1.0.120 or newer",
                  "Error",MB_OK);
          }
        return 1;
      }

См. также

Главная функция DLL, rdsServiceVersion, rdsReportVersion, RDS_DWORDVERDATE.