Текущий раздел:

Описания RDS

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

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

§2.4. Инициализация и очистка данных блока

Полный исходный текст модели блока на языке C++. В этом примере создается и уничтожается личная область данных блока.

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

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

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

      //============= Модель блока ==============
      extern "C" __declspec(dllexport)
        int RDSCALL Test1(int CallMode,
                          RDS_PBLOCKDATA BlockData,
                          LPVOID ExtParam)
      { TTest1Data *data;
        switch(CallMode)
          { case RDS_BFM_INIT:    // Инициализация
              BlockData->BlockData=new TTest1Data();
              break;
            case RDS_BFM_CLEANUP: // Очистка
              data=(TTest1Data*)(BlockData->BlockData);
              delete data;
              break;
          }
        return RDS_BFR_DONE;
      }
      //=========================================