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

Приложения

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

А.2. События блока и связанные с ними описания

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

А.2.1. Функция модели блока

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

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

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

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

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

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

Примечания

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

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

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


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