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

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

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

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

  extern "C" __declspec(dllexport)
    int  TestStructSum(int CallMode,
                               BlockData,
                               ExtParam)
  {
  // 
  #define pStart  ((char *)(BlockData->VarTreeData))
  #define Start (*((char *)(pStart)))
  #define Ready (*((char *)(pStart+RDS_VSZ_S)))
  #define x1 (*((void **)(pStart+2*RDS_VSZ_S)))
  #define x2 (*((void **)(pStart+2*RDS_VSZ_S+RDS_VSZ_STRUCT)))
  #define y (*((void **)(pStart+2*RDS_VSZ_S+2*RDS_VSZ_STRUCT)))
  //  TestComplex
  #define Re(base) (*((double *)(base)))
  #define Im(base) (*((double *)(((char*)(base))+RDS_VSZ_D)))

    switch(CallMode)
      { // Проверка типа переменных
        case :
          if(strcmp((char*)ExtParam,"{SS{DD}{DD}{DD}}")==0)
            return ;
          return ;

        // Выполнение такта моделирования
        case :
          Re(y)=Re(x1)+Re(x2);
          Im(y)=Im(x1)+Im(x2);
          break;
      }
    return ;
  // Отмена макроопределений
  #undef Im
  #undef Re
  #undef y
  #undef x2
  #undef x1
  #undef Ready
  #undef Start
  #undef pStart
  }
  //=========================================


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