Приложения
Приложение А. Функции, константы и структуры RDS
А.5. Сервисные функции и макросы RDS
А.5.14. Общие функции работы с переменными блока
А.5.14.8. rdsFindBlockVar – найти переменную блока по имени
Функция rdsFindBlockVar ищет статическую переменную с указанным именем в указанном блоке и возвращает ее уникальный идентификатор.
RDS_VHANDLE RDSCALL rdsFindBlockVarA( RDS_BHANDLE Block, // Идентификатор блока RDSCSTR VarName, // Имя переменной (UTF8) BOOL FullName, // В имени могут быть поля RDS_PVARDESCRIPTION pDescr // Заполняемое описание ); RDS_VHANDLE RDSCALL rdsFindBlockVarW( RDS_BHANDLE Block, // Идентификатор блока RDSWCSTR VarName, // Имя переменной (UTF16) BOOL FullName, // В имени могут быть поля RDS_PVARDESCRIPTION pDescr // Заполняемое описание ); // Функция-псевдоним RDS_VHANDLE RDSCALL rdsFindBlockVar( RDS_BHANDLE Block, // Идентификатор блока RDSXCSTR VarName, // Имя переменной (кодировка по умолчанию) BOOL FullName, // В имени могут быть поля RDS_PVARDESCRIPTION pDescr // Заполняемое описание );
Тип указателя на эту функцию
RDS_VhBhSBVd (для UTF8) или RDS_VhBhWsBVd (для UTF16)
Параметры
- Block (RDS_BHANDLE)
- Идентификатор блока, в котором нужно найти переменную.
- VarName (RDSCSTR, RDSWCSTR, RDSXCSTR)
- Указатель на строку с именем переменной.
- FullName (BOOL)
- TRUE – в параметре VarName передано имя переменной с возможным указанием полей структур и элементов массивов и матриц. FALSE – в VarName передано имя переменной, непосредственно находящейся в блоке (функция в этом случае выполняется несколько быстрее).
- pDescr (RDS_PVARDESCRIPTION)
- Указатель на структуру описания переменной RDS_VARDESCRIPTION, которую функция должна заполнить параметрами найденной переменной. Если вызывающей программе не нужно описание переменной, в этом параметре можно передать NULL.
Возвращаемое значение
Идентификатор найденной переменной (тип RDS_VHANDLE) или NULL, если переменной с именем VarName нет в блоке Block.
Примечания
Эта функция позволяет найти идентификатор статической переменной блока Block по имени этой переменной VarName. К имени переменной может быть добавлено имя поля, если эта переменная – структура, или индекс элемента, если переменная – массив. В этом случае в параметре FullName необходимо передать значение TRUE, и функция вернет не идентификатор самой переменной блока, а идентификатор поля структуры или элемента массива, которые, с точки зрения RDS, являются вложенными переменными. Допустим, например, что в блоке Block есть следующие переменные:
- вещественная (double) переменная «x»;
- структура «in» типа «Complex», содержащая вещественные поля «Re» и «Im»;
- матрица целых чисел «Y»;
- массив «out» структур «Complex».
В этом случае вызовы функции rdsFindBlockVar будет возвращать следующие идентификаторы:
| VarName | Возврат при FullName=TRUE | Возврат при FullName=FALSE |
|---|---|---|
| «x» | переменная «x» | переменная «x» |
| «in» | переменная «in» | переменная «in» |
| «out» | переменная «out» | переменная «out» |
| «in.Re» | поле «Re» структуры «in» | NULL |
| «Y[0][1]» | элемент матрицы «Y» | NULL |
| «out[3]» | элемент массива «out» (структура типа «Complex») | NULL |
| «out[1].Im» | поле «Im» структуры, являющейся элементом массива «out» | NULL |
Следует помнить, что все элементы конкретной матрицы (массива) в RDS обслуживаются единственной вложенной переменной с типом элемента этой матрицы – при работе этой вложенной переменной автоматически передаются базовые адреса конкретных элементов. Таким образом, вызов rdsFindBlockVar для «out[0]», «out[1]», «out[2]» и т.д. будет возвращать один и тот же идентификатор переменной-элемента массива «out».
См. также