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

Полный исходный текст на языке C++ для библиотеки (DLL) с моделью блока, сохраняющего параметры в двоичном формате. Изменения относительно предыдущей версии этой модели выделены цветом.

  // Сохранение параметров в двоичном формате
  #include <windows.h>
  #include <math.h>
  #include <RdsDef.h>
  // Подготовка описаний сервисных функций
  
  #include <RdsFunc.h>

  //==========  ==========
  int WINAPI ( /*hinst*/,
                           unsigned long reason,
                           void* /*lpReserved*/)
  { if(reason==DLL_PROCESS_ATTACH) // Загрузка DLL
      { // Получение доступа к функциям RDS
        if(!GetInterfaceFunctions())
           // Сообщение: старая версия RDS
      }
    return 1;
  }
  //========= Конец главной функции =========

  //=========================================
  //= Пример блока с личной областью данных =
  //=========================================

  //====== Класс личной области данных ======
  class TTest1Data
  { public:
      int IParam;       // Целый параметр
      double DParam;    // Вещественный параметр
      int Setup(void);  // Функция настройки параметров
      TTest1Data(void)  // Конструктор класса
        { IParam=0; DParam=0.0;
          (L"Область создана",L"TTest1Data",MB_OK);
        };
      ~TTest1Data()     // Деструктор класса
        { (L"Область удалена","LTTest1Data",MB_OK);};
  };
  //=========================================

  //============= Модель блока ==============
  extern "C" __declspec(dllexport)
    int  Test1(int CallMode, // Режим вызова (событие в RDS)
                       BlockData, // Структура данных блока
                       /*ExtParam*/) // Доп.параметр (здесь не используется)
  { TTest1Data *data;
    switch(CallMode)
      { case : // Инициализация
          BlockData->BlockData=new TTest1Data();
          break;

        case : // Очистка
          data=(TTest1Data*)(BlockData->BlockData);
          delete data;
          break;

        case : // Функция настройки
          data=(TTest1Data*)(BlockData->BlockData);
          return data->Setup();

        case :
          // Сохранение параметров в двоичном формате 
          data=(TTest1Data*)(BlockData->BlockData);
          (&(data->IParam),sizeof(data->IParam));
          (&(data->DParam),sizeof(data->DParam));
          break;

        case :
          // Загрузка параметров в двоичном формате 
          data=(TTest1Data*)(BlockData->BlockData);
          (&(data->IParam),sizeof(data->IParam));
          (&(data->DParam),sizeof(data->DParam));
          break;
      }
    return ;
  }
  //=========================================
  // Функция настройки параметров
  // 
  // 
  // 
  int TTest1Data::Setup(void)
  {  window; // Идентификатор вспомогательного объекта
     ok;            // Пользователь нажал "OK"
    // Создание окна
    window=(FALSE,-1,-1,"Ввод параметров");
    // Добавление полей ввода
    (window,0,1,,
                   "Целый параметр:",80);
    (window,0,2,,
                   "Вещественный параметр:",80);
    // Занесение исходных значений в поля ввода
    (window,1,,IParam);
    (window,2,,DParam);
    // Открытие окна
    ok=(window,NULL);
    if(ok)
      { // Нажата кнопка OK - запись параметров обратно в блок
        IParam=(window,1,);
        DParam=(window,2,);
      }
    // Уничтожение окна
    (window);
    // Возвращаемое значение
    return ok?:;
  }
  //=========================================


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