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

Руководство программиста

Глава 2. Создание моделей блоков

§2.3. Структура функции модели блока

Рассматривается общая структура функции модели блока на языке C/C++, объясняется смысл ее параметров. Описывается структура данных, которую RDS хранит для каждого блока.

Любая функция модели блока RDS имеет следующий вид:

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

Вызывая эту функцию, RDS передает ей три параметра:

Каждое значение режима вызова (параметра CallMode функции модели) соответствует определенному событию, на которое, при необходимости, может отреагировать модель блока. При этом для каждого события через параметр ExtParam передается указатель на данные (как правило, на структуру), описывающие произошедшее событие. Общее число событий, на которые может реагировать модель, довольно велико, их полный список приведен в приложении А. Среди них – инициализация и очистка данных блока, выполнение одного такта в режиме расчета, загрузка и сохранение параметров блока, реакция на мышь и клавиатуру, и т.п. Возвращаемое функцией значение интерпретируется RDS по-разному, в зависимости от цели вызова модели блока, то есть значения параметра CallMode. В большинстве случаев, возврат целой константы RDS_BFR_DONE, описанной в «RdsDef.h» и равной нулю, говорит об успешном завершении функции.

Структура данных блока RDS_BLOCKDATA устроена следующим образом:

  typedef struct
  {  VarTreeData;    // Начало дерева переменных
     BlockData;      // Указатель на личные данные
     Block;     // Идентификатор блока
     BlockNameA;    // Имя блока (UTF8)
     BlockNameW;   // Имя блока (UTF16)
    //  BlockName; // Имя блока (поле-псевдоним, см. ниже)
     Parent;    // Идентификатор подсистемы
     Flags;           // Флаги
     Width,Height; // Размеры блока
     Tag;          // Пользовательское поле
  } ;
  typedef  *; // Указатель на структуру

Далее будут рассмотрены примеры моделей, в которых реализованы реакции на различные события.


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