Приложения
Приложение А. Функции, константы и структуры RDS
А.3. События модуля автокомпиляции и связанные с ними структуры
А.3.3. RDS_COMPMODELDATA – структура данных модели
Структура данных автокомпилируемой модели RDS_COMPMODELDATA содержит основные параметры этой модели, которые нужны функции обслуживающего ее модуля для реакции на различные события. Эта структура создается перед первым подключением данной модели к какому-либо блоку схемы и хранится в памяти до тех пор, пока эта модель не будет отключена от последнего связанного с ней блока. Общая структура данных, используемых для автоматической компиляции моделей, подробно рассмотрена в главе 3 руководства программиста.
typedef struct { RDS_MODELHANDLE Model; // Идентификатор модели RDSCSTR ModelNameA; // Имя модели (UTF8) RDSWCSTR ModelNameW; // Имя модели (UTF16) //RDSXCSTR ModelName; // Имя модели (поле-псевдоним) RDSCSTR ModelNameUCA; // Имя модели в верхнем регистре (UTF8) RDSWCSTR ModelNameUCW; // Имя модели в верхнем регистре (UTF16) //RDSXCSTR ModelNameUC; // Имя модели в верхнем регистре (поле-псевдоним) LPVOID ModelData; // Адрес области данных модели RDSINT32 NBlocks; // Число блоков, связанных // с данной моделью RDS_COMPHANDLE Module; // Идентификатор обслуживающего // модуля автокомпиляции RDSCSTR CompDllNameA; // DLL скомпилированной модели (UTF8) RDSWCSTR CompDllNameW; // DLL скомпилированной модели (UTF16) //RDSXCSTR CompDllName; // DLL скомпилированной модели (поле-псевдоним) RDSCSTR CompDllFuncA; // Имя функции скомпилированной модели (UTF8) RDSWCSTR CompDllFuncW; // Имя функции скомпилированной модели (UTF16) //RDSXCSTR CompDllFunc; // Имя функции скомпилированной модели (поле-псевдоним) BOOL Valid; // Признак необходимости перекомпиляции RDSCSTR AltModelNameA; // Альтернативное имя модели (UTF8) RDSWCSTR AltModelNameW; // Альтернативное имя модели (UTF16) //RDSXCSTR AltModelName; // Альтернативное имя модели (поле-псевдоним) RDSINT32 Tag; // Пользовательское поле RDSINT32 ModelVersion; // Версия модели DWORD ModelVersionDate; // Время изменения модели } RDS_COMPMODELDATA; typedef RDS_COMPMODELDATA *RDS_PCOMPMODELDATA;
Поля структуры
- Model (RDS_MODELHANDLE)
- Уникальный идентификатор данной модели. Тип RDS_MODELHANDLE используется в RDS для указания конкретной автоматически компилируемой модели, с которой производится то или иное действие.
- ModelNameA (RDSCSTR), ModelNameW (RDSWCSTR), ModelName (RDSXCSTR)
- Указатель на строку с именем данной модели во внутренней памяти RDS. Имя модели должно однозначно идентифицировать эту модель с точки зрения пользователя – именно это имя он указывает в окне параметров блока, когда подключает к нему автоматически компилируемую модель. Имена моделей, отличающиеся только регистром символов, считаются в RDS одинаковыми. Если модуль автокомпиляции хранит тексты своих моделей в отдельных файлах, в качестве имени модели может использоваться имя файла с ее текстом. Функция модуля не должна изменять эту строку, для переименования модели следует использовать сервисную функцию rdscompRenameModel.
- ModelNameUCA (RDSCSTR), ModelNameUCW (RDSWCSTR), ModelNameUC (RDSXCSTR)
- Указатель на строку с именем данной модели, приведенным к верхнему регистру, во внутренней памяти RDS. Поскольку в RDS имена моделей, отличающиеся только регистром, считаются одинаковыми, эту строку можно использовать для поиска модели по имени. Функция модуля не должна изменять эту строку, для переименования модели следует использовать сервисную функцию rdscompRenameModel.
- ModelData (LPVOID)
- Указатель на личную область данных этой модели. Перед подключением данной модели к самому первому блоку схемы RDS записывает в это поле значение NULL и больше к нему не обращается. Если модулю требуется отводить память для хранения параметров каждой из своих моделей, он может записать указатель на отведенную область памяти в это поле при инициализации модели, то есть в момент реакции на событие RDS_COMPM_MODELINIT. В этом случае освободить отведенную область тоже должна будет функция модуля – обычно это делается перед отключением модели от последнего связанного с ней блока в реакции на событие RDS_COMPM_MODELCLEANUP.
- NBlocks (RDSINT32)
- Число блоков, к которым в данный момент подключена эта модель. Вместе с сервисной функцией rdscompGetModelBlock может использоваться для перебора всех таких блоков. Функция модуля автокомпиляции не должна изменять это число.
- Module (RDS_COMPHANDLE)
- Идентификатор модуля автокомпиляции (RDS_COMPHANDLE), к которому относится данная модель. Функция модуля автокомпиляции не должна изменять это поле.
- CompDllNameA (RDSCSTR), CompDllNameW (RDSWCSTR), CompDllName (RDSXCSTR)
- Путь к файлу DLL, в котором будет находиться функция данной модели после компиляции. Строка пути размещается во внутренней памяти RDS. Функция модуля не должна изменять это поле непосредственно: путь к файлу DLL устанавливается сервисной функцией rdscompSetModelFunction при вызове модуля автокомпиляции для реакции на событие RDS_COMPM_PREPARE.
- CompDllFuncA (RDSCSTR), CompDllFuncW (RDSWCSTR), CompDllFunc (RDSXCSTR)
- Имя экспортированной функции модели блока, которая будет создана в результате компиляции данной модели. Строка имени размещается во внутренней памяти RDS. Функция модуля не должна изменять это поле непосредственно: как и имя файла DLL (CompDllName), имя функции устанавливается сервисной функцией rdscompSetModelFunction при вызове модуля автокомпиляции для реакции на событие RDS_COMPM_PREPARE.
- Valid (BOOL)
- Признак необходимости компиляции данной модели: функция модуля, реагируя на событие RDS_COMPM_PREPARE, записывает в это поле TRUE, если модель не изменилась с момента прошлой компиляции и повторная компиляция не требуется. Если модель изменилась, в это поле необходимо записать FALSE. Чаще всего необходимость компиляции устанавливают, сравнивая время последнего изменения текста модели с временем создания файла DLL.
- AltModelNameA (RDSCSTR), AltModelNameW (RDSWCSTR), AltModelName (RDSXCSTR)
- Указатель на строку с альтернативным именем модели во внутренней памяти RDS. Функция модуля не должна изменять это поле непосредственно: альтернативное имя модели устанавливается сервисной функцией rdscompSetAltModelName и запоминается в файле схемы вместе с остальными параметрами блока. В отличие от основного имени модели, на которое указывает поле ModelName, альтернативное имя модели пользователь не видит и установить или изменить его вручную не может. Фактически, альтернативное имя модели представляет собой хранимую строку, которую модуль автокомпиляции может использовать в своих целях любым удобным программисту образом.
- Tag (RDSINT32)
- Целое поле, никак не обрабатываемое RDS. Программист может использовать его любым удобным способом.
- ModelVersion (RDSINT32)
- Версия модели, сформированная макросом RDS_INTVERSION или аналогичным способом. Она будет отображаться в окне информации о схеме на вкладке «». Исходно значение этого поля равно нулю (нет версии), модуль автокомпиляции может устанавливать его по своему усмотрению.
- ModelVersionDate (DWORD)
- Дата и время последнего изменени модели, сформированная макросом RDS_DWORDVERDATE, RDS_DWORDVERDATESHORT или аналогичным способом. Эта информация отображается в окне информации о схеме вместе с версией модели. Исходно значение этого поля равно нулю (время не указано), модуль автокомпиляции может устанавливать его по своему усмотрению.
См. также
RDS_COMPM_MODELINIT, RDS_COMPM_MODELCLEANUP, RDS_COMPM_PREPARE, rdscompSetAltModelName, rdscompSetModelFunction, rdscompRenameModel.