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

Приложения

Приложение А. Функции, константы и структуры 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  GetInterfaceFunctions
  #include <>
  // Главная функция DLL
  int WINAPI ( /*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=();
        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.


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