Приложения
Приложение А. Функции, константы и структуры RDS
А.5. Сервисные функции и макросы RDS
А.5.2. Управление работой RDS и функции общего назначения
А.5.2.6. Макросы RDS_SERV_ERROR_MSGA и RDS_SERV_ERROR_MSGW – собщения о несовместимой версии RDS
Макросы RDS_SERV_ERROR_MSGA и RDS_SERV_ERROR_MSGW предназначены для вывода сообщения о несовместимости версии RDS, в которую загружается DLL, и описаний, с которыми скомпилирована эта DLL. В отличие от большинства остальных макросов, они описаны в файле «RdsFunc.h», а не в «RdsDef.h», поскольку обычно используются вместе с описанной там же функцией, автоматически вставляемой в программу при использовании макроса RDS_SERV_FUNC_BODY. Параметров эти макросы не имеют. Если перед включением в текст программы файлов «RdsDef.h» и «RdsFunc.h» была определена константа RDS_NOVERSIONDEFINES, эти два макроса определены не будут, поскольку они используют макроопределения для текущей версии RDS.
Определения
#define RDS_SERV_ERROR_TEXTW L"Эти модели могут использоваться только с версией RDS не ниже " \ RDS_STRVERSIONW L"\n" \ L"These models need RDS " RDS_STRVERSIONW L" or newer" #define RDS_SERV_ERROR_TEXTA "These models need RDS " RDS_STRVERSIONA " or newer" #define RDS_SERV_ERROR_MSGW { if(rdsIncompatibleDll) rdsIncompatibleDll(); \ MessageBoxW(NULL,RDS_SERV_ERROR_TEXTW,NULL,MB_OK | MB_ICONERROR); } #define RDS_SERV_ERROR_MSGA { if(rdsIncompatibleDll) rdsIncompatibleDll(); \ MessageBoxA(NULL,RDS_SERV_ERROR_TEXTA,NULL,MB_OK | MB_ICONERROR); }
Примечания
Для вывода сообщения макросы используют функцию Windows API MessageBox. Макрос RDS_SERV_ERROR_MSGA вызывает версию этой функции для кодировки ANSI (MessageBoxA) и, поэтому, выводит сообщение только на английском языке. Макрос RDS_SERV_ERROR_MSGW вызывает версию функции для кодировки UTF16 (MessageBoxW) и выводит сообщение на русском и английском. В сообщении указывается версия RDS из описаний в «RdsDef.h». Если есть доступ к сервисной функции rdsIncompatibleDll, она также вызывается, чтобы сообщить RDS о невозможности использования моделей из данной библиотеки.
Пример
// Главная функция DLL int WINAPI DllMain( HINSTANCE /*hinst*/, // Дескриптор модуля этой DLL unsigned long reason, // Причина вызова (загрузка или // выгрузка DLL) void* /*lpReserved*/ // Способ загрузки – динамический // или статический ) { if(reason==DLL_PROCESS_ATTACH) // Загрузка DLL { // Получение доступа к функциям RDS if(!GetInterfaceFunctions()) RDS_SERV_ERROR_MSGW // Сообщение: старая версия RDS } // Возврат – успешное завершение return 1; }
См. также