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

Описания RDS

Приложения

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

А.1. Типы параметров

А.1.1. Идентификаторы объектов и вспомогательные типы

# Приложения

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

Описываются сервисные функции, экспортированные из модуля «rds.exe», используемые в них структуры и константы. Применение этих функций для создании моделей блоков описывается в главе 2 руководства программиста, для создания модулей автоматической компиляции моделей – в главе 3 там же.

### А.1. Типы параметров

Описываются основные типы, используемые в моделях и дополнительных модулях для взаимодействия с RDS.

#### А.1.1. Идентификаторы объектов и вспомогательные типы

Схема в RDS состоит из множества различных объектов: блоков, связей, переменных, таймеров и т.п. Каждый из таких объектов имеет уникальный идентификатор, который нужно указывать в сервисных функциях для ссылки на конкретный объект, с которым нужно произвести то или иное действие. Большинство этих идентификаторов представляют собой указатели на какие-либо данные (тип LPVOID Windows API), но, для лучшей читаемости исходных текстов программ, в файле «RdsDef.h» для них оператором typedef введены специальные типы:

Тип | Объект
--- | ---
RDS_BHANDLE | Блок в схеме, независимо от его типа (простой блок, подсистема, внешний вход или выход, ввод шины). Используется во всех сервисных функциях, получающих или устанавливающих параметры блоков. Модель блока всегда имеет доступ к идентификатору своего блока и его родительской подсистемы через структуру данных блока RDS_BLOCKDATA.
RDS_CHANDLE | Связь или шина в схеме. Используется во всех сервисных функциях, получающих или устанавливающих параметры связей и шин.
RDS_TIMERID | Программируемый таймер блока. Используется в функциях работы с таймерами, в реакциях на событие RDS_BFM_TIMER и RDS_BFM_WINREFRESH.
RDS_MENUITEM | Пункт системного или контекстного меню, добавленный моделью блока. Используется в сервисных функциях работы с меню.
RDS_VHANDLE | Статическая или динамическая переменная блока. Используется в некоторых сервисных функциях для получения описания переменных и их редактирования. Для доступа к значениям переменных, как правило, не используется (см. §2.5 и §2.6 руководства программиста).
RDS_HOBJECT | Вспомогательный объект RDS. Вспомогательные объекты служат для различных целей: редактирования связей, разбора текста, открытия окон и т.п., но все они имеют этот тип.
RDS_NETSTATION | Одна из машин с запущенной копией RDS, подключенная к серверу. Используется для указания машины при отправке данных по сети конкретному блоку функцией rdsNetSendData и в реакциях на события RDS_BFM_NETDATARECEIVED и RDS_BFM_NETERROR.
RDS_NETBLOCK | Блок на одной из машин с запущенной копией RDS, подключенной к серверу. Используется для указания блока при отправке данных по сети конкретному блоку функцией rdsNetSendData и в реакциях на события RDS_BFM_NETDATARECEIVED и RDS_BFM_NETERROR. Не взаимозаменяем с RDS_BHANDLE – последний может использоваться только в качестве идентификатора блока в пределах одной схемы на одной машине.
RDS_COMPHANDLE | Модуль автоматической компиляции. Используется в сервисных функциях, работающих с автокомпилируемой моделью, для указания конкретного модуля.
RDS_MODELHANDLE | Автоматически компилируемая модель. Используется в сервисных функциях, работающих с автокомпилируемой моделью, для указания конкретной модели.

Для взаимодействия с Windows API многие сервисные функции и структуры работают со значениями следующих, стандартных для Windows, типов (а также и их «псевдонимов», введенных специально для RDS):

Тип | Объект
--- | ---
BOOL | Логическое значение, может принимать значения TRUE (истина) или FALSE (ложь). Этот тип эквивалентен стандартному типу C «int».
BYTE | Целая переменная, занимающая один байт. Этот тип эквивалентен стандартному типу C «unsigned char». Может принимать значения от 0 до 255.
COLORREF | Тридцатидвухбитное целое число, описывающее цвет. Младший байт числа содержит интенсивность красного канала (в диапазоне от 0 до 255), второй байт – интенсивность зеленого, третий байт – интенсивность синего, четвертый (старший) байт всегда нулевой. Таким образом, число 0xFF0000 соответствует синему цвету, 0xFFFFFF – белому, 0 – черному.
DWORD | Тридцатидвухбитное беззнаковое целое число (unsigned long). Может принимать значения от 0 до 4294967295. В RDS достаточно часто используется для хранения различных битовых флагов или размеров областей памяти.
HBITMAP | Дескриптор загруженного в память растрового рисунка. В RDS используется только в функции rdsRegisterWindow.
HDC | Контекст устройства (device context) Windows. Контексты устройств используются в графических функциях Windows API для указания объекта (например, окна), на котором производится построение изображения.
HINSTANCE | Дескриптор загруженного в память модуля, например, DLL. Фактически, это базовый адрес модуля, но в функциях Windows API он часто используется просто как идентификатор этого модуля.
HWND | Дескриптор окна Windows. Такие дескрипторы используются в функциях Windows API, выполняющих различные действия с окнами.
LOGFONT, LOGFONTA, LOGFONTW | Структура, содержащая описание шрифта Windows. Ее поля подробно описаны в руководстве по Windows API. В RDS она используется не очень широко.
LPSTR, RDSSTR, RDSVSTR, RDSCSTR | Указатель на строку байтов, завершающуюся нулевым байтом. Первые три типа эквивалентны стандартному типу C «char*». Тип «RDSCSTR» эквивалентен типу «const char*». В RDS строки этих типов всегда считаются имеющими кодировку UTF8. Следует помнить, что для символов национальных алфавитов один символ может занимать несколько последовательных байтов.
LPWSTR, RDSWSTR, RDSWVSTR, RDSWCSTR | Указатель на строку в кодировке UTF16, завершающуюся нулевым кодом. Первые три типа эквивалентны стандартному типу C «wchar_t*». Тип «RDSWCSTR» эквивалентен типу «const wchar_t*».
RDSXSTR, RDSXVSTR, RDSXCSTR | Указатель на строку в кодировке UTF8 или UTF16 в зависимости от наличия макроопределения RDS_UTF16DEFAULT (см. приложение А.1.3). В типе «RDSXCSTR» к строке добавлен модификатор «const».
RDSXCHAR | Один символ текста в кодировке UTF8 или UTF16 в зависимости от наличия макроопределения RDS_UTF16DEFAULT. Эквивалентен типу «char», если кодировка по умолчанию – UTF8, и «wchar_t», если кодировка – UTF16.
LPVOID | Указатель на некоторый объект в памяти без уточнения типа этого объекта. Этот тип эквивалентен стандартному типу C «void*».
POINT | Структура, описывающая точку с двумя целыми координатами (поля x и y).
RECT | Структура, описывающая прямоугольник через целые координаты его левой верхней (поля left и top) и правой нижней (поля right и bottom) точек.

В сервисных функциях и структурах RDS также используются следующие обозначения-синонимы для стандартных типов Windows и языка C:

Описание в RDS | Стандартное описание | Назначение
--- | --- | ---
RDSBYTES | BYTE*, unsigned char* | Указатель на массив байтов.
RDSINT32 | int | Целая переменная со знаком, занимающая тридцать два бита (четыре байта).
RDSCALL | CALLBACK, APIENTRY, __stdcall | Тип вызова всех сервисных функций RDS и всех функций обратного вызова, используемых в моделях блоков и модулях автокомпиляции. Аргументы функции передаются в стеке справа налево, стек освобождается вызванной функцией.
RDS_SHORT | short int | Двухбайтовое целое число со знаком. В RDS предусмотрен такой тип переменных блока, больше этот тип нигде не используется.
RDS_PCOLORREF | COLORREF*, LPCOLORREF | Указатель на тридцатидвухбитное число, описывающее цвет (COLORREF).