Приложения
Приложение А. Функции, константы и структуры RDS
А.3. События модуля автокомпиляции и связанные с ними структуры
А.3.4. События модуля автокомпиляции
А.3.4.2. RDS_COMPM_CANATTACHBLK – проверка возможности подключения модели к блоку
Первый параметр функции модуля (int CallMode)
Константа RDS_COMPM_CANATTACHBLK.
Третий параметр функции модуля (void *ExtParam)
Указатель на структуру RDS_COMPCANATTACHBLKDATA, содержащую идентификатор блока, идентификатор подключаемой к нему модели и причину подключения.
Возвращаемое функцией модуля значение
| RDS_COMPR_DONE | Подключение данной модели к данному блоку возможно. |
| RDS_COMPR_ERROR | Подключение данной модели к данному блоку невозможно, выводится сообщение об ошибке. |
| RDS_COMPR_ERRORNOMSG | Подключение данной модели к данному блоку невозможно, сообщение об ошибке не выводится. |
Примечания
Событие RDS_COMPM_CANATTACHBLK возникает непосредственно перед подключением автокомпилируемой модели к блоку. Данные модели в этот момент еще не созданы и идентификатора для нее еще нет, поэтому в структуре параметров события RDS_COMPCANATTACHBLKDATA передается только имя модели. Реагируя на этот вызов, функция модуля должна проверить принципиальную возможность подключения данной модели к данному блоку. Например, модель, использующая статические переменные, не может подключаться к подсистемам, внешним входам/выходам и вводам шин, поскольку их структура переменных устроена не так, как у простых блоков. Если подключение модели к блоку невозможно, функция либо возвращает константу RDS_COMPR_ERROR или RDS_COMPR_ERRORNOMSG, либо вызывает сервисную функцию rdscompAttachDifferentModel, сообщая RDS, что, хотя модель с данными именем подключить нельзя, вместо нее можно подключить модель с другим именем.
В параметре ExtParam при реакции на событие RDS_COMPM_CANATTACHBLOCK передается указатель на структуру RDS_COMPCANATTACHBLKDATA:
typedef struct { RDSCSTR ModelNameA; // Имя модели (UTF8) RDSWCSTR ModelNameW; // Имя модели (UTF16) //RDSXCSTR ModelName; // Имя модели (поле-псевдоним) RDSCSTR ModelNameUCA; // Имя модели в верхнем регистре (UTF8) RDSWCSTR ModelNameUCW; // Имя модели в верхнем регистре (UTF16) //RDSXCSTR ModelNameUC; // Имя модели в верхнем регистре (поле-псевдоним) RDSCSTR AltModelNameA; // Альтернативное имя модели (UTF8) RDSWCSTR AltModelNameW; // Альтернативное имя модели (UTF16) //RDSXCSTR AltModelName; // Альтернативное имя модели (поле-псевдоним) RDS_BHANDLE Block; // Идентификатор блока RDSINT32 AttachReason; // Причина подключения (RDS_COMP_AR_*) BOOL ChangeModel; // Возврат: подключить другую // модель вместо этой } RDS_COMPCANATTACHBLKDATA; typedef RDS_COMPCANATTACHBLKDATA *RDS_PCOMPCANATTACHBLKDATA;
Поля структуры
- ModelNameA (RDSCSTR), ModelNameW (RDSWCSTR), ModelName (RDSXCSTR)
- Указатель на строку во внутренней памяти RDS, содержащую имя подключаемой к блоку модели в том виде, в каком его указал пользователь. Функция модуля не должна изменять это поле.
- ModelNameUCA (RDSCSTR), ModelNameUCW (RDSWCSTR), ModelNameUC (RDSXCSTR)
- Указатель на строку во внутренней памяти RDS, содержащую имя подключаемой к блоку модели в верхнем регистре. Функция модуля не должна изменять это поле.
- AltModelNameA (RDSCSTR), AltModelNameW (RDSWCSTR), AltModelName (RDSXCSTR)
- Указатель на строку во внутренней памяти RDS, содержащую альтернативное имя подключаемой к блоку модели. Функция модуля не должна изменять это поле.
- Block (RDS_BHANDLE)
- Идентификатор блока, к которому подключается указанная модель.
- AttachReason (RDSINT32)
- Причина подключения модели к блоку – одна из констант RDS_COMP_AR_*.
- ChangeModel (BOOL)
- Возвращаемый признак подключения другой модели. Перед вызовом функции модуля для реакции на событие RDS_COMPM_CANATTACHBLK RDS записывает в это поле значение FALSE. Если функция модуля хочет подключить к указанному блоку другую модель вместо той, имя которой передано в поле ModelName, она должна записать в ChangeModel значение TRUE, указать новое имя подключаемой модели вызовом сервисной функции rdscompAttachDifferentModel, и вернуть значение RDS_COMPR_DONE.
Пример
Пример реакции модуля на это событие приведен в §3.3 руководства программиста.
См. также