Текущий раздел:

Описания RDS

Приложения

Приложение А. Функции, константы и структуры RDS

А.5. Сервисные функции и макросы RDS

А.5.6. Операции с блоками и связями

А.5.6.4. rdsBlockOrConnByExtId – блок или связь по внешнему идентификатору

# Приложения

## Приложение А. Функции, константы и структуры RDS

### А.5. Сервисные функции и макросы RDS

#### А.5.6. Операции с блоками и связями

##### А.5.6.4. rdsBlockOrConnByExtId – блок или связь по внешнему идентификатору

Функция rdsBlockOrConnByExtId ищет блок, связь или шину по уникальному целому идентификатору.

      BOOL RDSCALL rdsBlockOrConnByExtId(
        RDS_BHANDLE Parent,           // Родительская подсистема
        DWORD ExtId,                  // Целый идентификатор
        RDS_PFINDBYEXTIDDATA pData    // Результаты поиска
      );

Тип указателя на эту функцию

RDS_BBhDwFbei

Параметры

Parent(RDS_BHANDLE)
  Идентификатор подсистемы, начиная с которой нужно искать блок, связь или шину – поиск будет осуществляться в этой подсистеме и во всех ее внутренних подсистемах, независимо от уровня вложенности. Если нужно искать блок во всей загруженной схеме, в этом параметре можно передать NULL.
ExtId(DWORD)
  Уникальный целый идентификатор блока, связи или шины.
pData(RDS_PFINDBYEXTIDDATA)
  Указатель на структуру RDS_FINDBYEXTIDDATA, в которую функция запишет результат поиска. Если вызывающей программе нужно проверить, существует ли объект с идентификатором ExtId в схеме, но не требуется узнавать его внутренний идентификатор ( RDS_BHANDLE или RDS_CHANDLE), в этом параметре можно передать NULL.

Возвращаемое значение

TRUE, если блок, связь или шина с идентификатором ExtId найдены, FALSE в противном случае.

Примечания

Эта функция позволяет найти блок, связь или шину, зная его или ее уникальный целый внешний идентификатор ExtId. Параметр Parent позволяет ограничить поиск какой-либо подсистемой и ее внутренними блоками. По результатам поиска заполняется структура RDS_FINDBYEXTIDDATA: в поле Found заносится признак успешности поиска (это же значение возвращается функцией), в поле Block – внутренний идентификатор найденного блока, в поле Conn – внутренний идентификатор найденной шины или связи, в поле Type – тип найденного объекта. Только одно из полей Block и Conn будет заполнено (другое поле получит значение NULL), поскольку идентификаторы блоков и связей не пересекаются, и параметру функции ExtId будет соответствовать либо блок, либо связь или шина.

Целые идентификаторы блоков и связей используются, в основном, при включении RDS в состав других программ – в отличие от внутренних идентификаторов, они не изменяются при сохранении схемы и ее повторной загрузке. В моделях блоков и модулях автоматической компиляции чаще используются внутренние идентификаторы RDS_BHANDLE и RDS_CHANDLE, поскольку обращение к блокам и связям с их помощью выполняется гораздо быстрее. Для однозначной идентификации блока или связи в схеме можно использовать один из трех следующих способов, каждый из которых имеет свои достоинства и недостатки:

Способ идентификации | Достоинства | Недостатки
--- | --- | ---
Полное имя блока | понятно для пользователя (может вводиться вручную); не изменяется после сохранения схемы; можно использовать при внешнем управлении RDS. | нельзя использовать для связей и шин; изменяется при переименовании блока.
Внутренние идентификаторы (RDS_BHANDLE и RDS_CHANDLE) | очень быстрый доступ к блокам и связям. | каждый раз присваиваются заново после загрузки схемы; нельзя использовать при внешнем управлении RDS; разные типы идентификаторов для блоков и связей/шин.
Внешние идентификаторы (DWORD) | не изменяются при сохранении схемы и переименовании блоков; можно использовать при внешнем управлении RDS. | относительно медленный поиск блока, связи или шины по идентификатору.

См. также

RDS_BLOCKDESCRIPTION, RDS_CONNDESCRIPTION, rdsUpdateExtIdsRange.