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

Приложения

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

А.5. Сервисные функции и макросы RDS

А.5.14. Общие функции работы с переменными блока

А.5.14.3. rdsClearRuntimeType – очистка переменной произвольного типа

Функция rdsClearRuntimeType очищает переменную произвольного типа с указанным базовым адресом.

  void  rdsClearRuntimeType(
     BaseAddr    // Базовый адрес переменной
  );

Тип указателя на эту функцию

RDS_VpV

Параметр

BaseAddr (LPVOID)
Базовый адрес переменной в дереве, то есть указатель на блок из восьми байтов, которые эта переменная занимает в дереве переменных блока (см. §2.5.6 руководства программиста).

Примечания

Вызов этой функции присваивает указанной переменной пустой фактический тип.

Пример

Модель блока-переключателя (мультиплексора), который подает на выход «y» произвольного типа элемент входного массива переменных произвольного типа «X» с номером, определяемым целым входом «N». Если «N» меньше нуля или больше числа элементов в массиве «X», выход «y» очищается, то есть ему присваивается пустой фактический тип.

Блок должен иметь следующую структуру переменных:

Смещение Имя Тип Размер Вход/выход Пуск Начальное значение
0 Start Сигнал 1 Вход 0
1 Ready Сигнал 1 Выход 0
2 X Массив произвольных 8 Вход
10 N int 4 Вход 0
14 y Произвольный 8 Выход

Модель блока:

  extern "C" __declspec(dllexport) int  MultiplexMVariant(
      int CallMode, BlockData, ExtParam)
  // 
  #define pStart ((char *)(BlockData->VarTreeData))
  #define pReady ((char *)(pStart+1))
  #define pX ((void **)(pStart+2))
  #define pN ((int *)(pStart+10))
  #define py ((void **)(pStart+14))
  {
    switch(CallMode)
      { case :
          if(strcmp((char*)ExtParam,"{SSMVIV}")==0)
            return RDS_BFR_DONE;
          return RDS_BFR_BADVARSMSG;

        case :
          if((pX)) // Массив X не пустой
            { int n=(pX)*(pX),N=*pN;
              BYTE *data=(BYTE*)(pX); // 1-й элемент
              if(N>=0 && N<n) // Копируем в выход
                (py,data+N*2*sizeof(void*));
              else
                rdsClearRuntimeType(py); // Очищаем выход
            }
          else // Нет массива X
            rdsClearRuntimeType(py); // Очищаем выход
          break;
      }
    return RDS_BFR_DONE;
  }
  #undef py
  #undef pN
  #undef pX
  #undef pReady
  #undef pStart
  //=========================================

См. также

rdsCopyRuntimeType, rdsSetRuntimeType, rdsGetBlockVarBase.


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