Приложения
Приложение А. Функции, константы и структуры 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.