Приложения
Приложение А. Функции, константы и структуры RDS
А.5. Сервисные функции и макросы RDS
А.5.13. Вызов функций блоков
А.5.13.12. rdsRegisterFunction – регистрация функции блока
Функция rdsRegisterFunction регистрирует в RDS функцию с указанным именем, присваивая ей уникальный целый идентификатор.
int RDSCALL rdsRegisterFunctionA( RDSCSTR FuncName // Имя функции (UTF8) ); int RDSCALL rdsRegisterFunctionW( RDSWCSTR FuncName // Имя функции (UTF16) ); // Функция-псевдоним int RDSCALL rdsRegisterFunction( RDSXCSTR FuncName // Имя функции (кодировка по умолчанию) );
Тип указателя на эту функцию
RDS_IS (для UTF8) или RDS_IWs (для UTF16)
Параметр
- FuncName (RDSCSTR, RDSWCSTR, RDSXCSTR)
- Указатель на строку (char* или wchar_t*, в зависимости от версии функции) с именем регистрируемой функции.
Возвращаемое значение
Уникальный целый идентификатор, присвоенный функции.
Примечания
Вызов rdsRegisterFunction регистрирует функцию с указанным именем в RDS: если эта функция регистрируется в первый раз с момента загрузки схемы в память или создания новой схемы, имя функции заносится во внутреннюю таблицу и ей присваивается уникальный целый идентификатор, который будет использоваться для вызова этой функции и для опознания ее в модели блока при реакции на событие RDS_BFM_FUNCTIONCALL. Если функция с этим именем уже регистрировалась, rdsRegisterFunction возвратит идентификатор, присвоенный этой функции при первой регистрации. Таким образом, регистрацию функции можно безопасно проводить несколько раз подряд – ее идентификатор от этого не изменится. Следует помнить, что при выгрузке схемы из памяти внутренняя таблица функций RDS очищается, поэтому при следующей загрузке той же самой схемы функции блоков могут получить другие идентификаторы.
Поскольку функцию блока достаточно зарегистрировать один раз за все время нахождения схемы в памяти, все вызовы rdsRegisterFunction часто выносят в главную функцию DLL, но можно регистрировать функции и при инициализации моделей блоков. RDS никогда не дает регистрируемой функции нулевой идентификатор, поэтому значение 0 в переменной, в которой будет храниться идентификатор функции, можно использовать как признак того, что эта функция еще не регистрировалась.
Пример
Пример использования функции rdsRegisterFunction приведен в §2.13.1 руководства программиста.
См. также