Навигация:
<< >> Оглавление Указатель

Приложения

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

А.3. События модуля автокомпиляции и связанные с ними структуры

Описываются все события, на которые может реагировать модуль автоматической компиляции моделей блоков (см. главу 3 руководства программиста), а также структуры данных, связанные с этими событиями.

А.3.1. Функция модуля автокомпиляции

Функция модуля автокомпиляции – это функция, которая вызывается RDS в ответ на различные события, относящиеся к блокам, для которых включена автоматическая компиляция моделей при помощи данного модуля. Принципы и способы автоматической компиляции моделей подробно рассмотрены в главе 3 руководства программиста. Функции модулей автокомпиляции должны размещаться в динамически подключаемых библиотеках (DLL) и регистрироваться в RDS в окне настроек автокомпиляции. Все функции модулей автокомпиляции имеют тип вызова RDSCALL, описанный в файле «RdsDef.h» – ему полностью соответствует тип CALLBACK в Windows API: аргументы функции передаются в стеке справа налево, стек освобождается вызванной функцией. В отличие от моделей блоков, функции модулей автокомпиляции всегда вызываются в главном потоке RDS, обслуживающем интерфейс пользователя. Функция модуля имеет следующий вид:

  int  имя_функции_модуля(
    int CallMode,                    // Режим вызова (событие)
     ModuleData,  // Данные модуля
     ExtParam                  // Дополнительные параметры
  );

Параметры функции

CallMode (int)
Событие, для реакции на которое вызывается функция модуля. Это одна из целых констант RDS_COMPM_*, описанных далее.
ModuleData ()
Указатель на структуру данных модуля (RDS_COMPMODULEDATA). В этой структуре хранятся общие данные модуля и его настроечные параметры.
ExtParam (LPVOID)
Указатель на дополнительные параметры события. Формат данных, на которые ссылается этот указатель общего вида, зависит от конкретного события, то есть от значения параметра CallMode.

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

Функция возвращает целое число, указывающее RDS на результат реакции на событие. В зависимости от события эти числа интерпретируются по-разному.

Примечания

Как и функция модели блока, функция модуля автокомпиляции чаще всего содержит внутри оператор switch, в котором, в зависимости от произошедшего события (то есть от значения параметра CallMode), выполняются различные действия:

  extern "C" __declspec(dllexport)
    int  имя_модуля(
    int CallMode,
     ModuleData,
     ExtParam)
  {
    switch(CallMode)
      { case событие_1:
          действия
          return результат;
        case событие_2:
          действия
          return результат;
        ...
      }
  }

Если модуль имеет личную область данных, то есть область памяти, в которой хранятся его внутренние параметры, не обрабатываемые RDS, эта область обычно отводится в реакции на событие инициализации RDS_COMPM_INIT и освобождается в реакции на событие RDS_COMPM_CLEANUP.


<< >> Оглавление Указатель