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

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

  // Сохранение параметров блока в формате INI-файла
  #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);     // Функция настройки параметров
      void SaveText(void);       // Функция записи параметров    
      void LoadText(char *text); // Функция загрузки параметров  
      TTest1Data(void)     // Конструктор класса
        { IParam=0; DParam=0.0;
          ("Область создана","TTest1Data",MB_OK);
        };
      ~TTest1Data()        // Деструктор класса
        { ("Область удалена","TTest1Data",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;

// Запись параметров в текстовом формате case : data=(TTest1Data*)(BlockData->BlockData); data->SaveText(); break; // Загрузка параметров в текстовом формате case : data=(TTest1Data*)(BlockData->BlockData); data->LoadText((char*)ExtParam); 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?:; } //=========================================
// Функция сохранения параметров void TTest1Data::SaveText(void) { ini; // Вспомогательный объект // Создание объекта для работы с образом INI-файла ini=(TRUE); // Создание новой секции "General" (ini,,0,"General"); // Запись двух параметров блока (ini,"IParam",IParam); (ini,"DParam",DParam); // Передача сформированного в объекте текста в RDS для записи (ini,); // Удаление объекта (ini); } //========================================= /* // Функция сохранения параметров – упрощенный вариант, ухудшена читаемость и // затруднено внесение изменений void TTest1Data::SaveText(void) { char buffer[1024]; // Буфер для формирования текста // Формирование текста в буфере при помощи функции sprintf sprintf(buffer, "[General]\nIParam=%d\nDParam=%lf", IParam,DParam); // Передача сформированного текста в RDS (buffer,FALSE); } //========================================= */ // Функция загрузки параметров void TTest1Data::LoadText(char *text) { ini; // Вспомогательный объект // Создание объекта для работы с образом INI-файла ini=(TRUE); // Передача в объект текста, полученного из RDS (ini,,0,text); // Установить текущую секцию if((ini,"General")) { // Такая секция есть в тексте – считать из нее параметры IParam=(ini,"IParam",0); DParam=(ini,"DParam",0.0); } // Удаление объекта (ini); } //=========================================


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