Uploaded by Марк Седов

C++ лаб 5

advertisement
ФЕДЕРАЛЬНОЕ АГЕНСТВО СВЯЗИ
ордена Трудового Красного Знамени федеральное государственное
бюджетное
образовательное учреждение высшего образования
МОСКОВСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ СВЯЗИ И
ИНФОРМАТИКИ
Лабораторная работа № 5
По теме:
«Создание dll библиотек для среды радиотехнического моделирования.»
Выполнил:
студент группы БРТ 1902
Седов Марк Александрович
Москва 2021
Вариант N = 38 K = 24 X = 8
Цель работы
Создать динамическую библиотеку (dll) с 1 радиотехническим
устройством для среды имитационного моделирования Спектр-2.
Устройство должно быть во временной (действительной) области.
Проверить работоспособность.
Laba5.cpp
#include "laba5.h" // включение нашего заголовочного файла
#define
MAX_DEVS
1
// общее кол-во уст-в
HINSTANCE g_hInst; // глобальные переменные
LPSYSPARAM g_sysp;
using namespace Spectr2; // разрешение видимости пространства имён спектра
BOOL WINAPI DllMain(HINSTANCE hDll, DWORD dwReason, LPVOID) //
входная точка библиотеки
{
switch (dwReason) {
case DLL_PROCESS_ATTACH: // при создании процесса...
g_hInst = hDll; // присвоить дескриптор глобальной переменной
break;
}
return TRUE; // успешно
}
DWORD __stdcall devGetDllInfo(char* info) // при загрузке спектра
высвечивается текст с краткой инф-ой о библиотеке
{
strcpy(info, "Лабораторная работая №5"); //
return MAX_DEVS;
}
DWORD __stdcall devGetDevices(int n0, LPSYSPARAM _sysp, SA_PROC*
saproc, HIMAGELIST himl) // инициализация устройств библиотеки
{
g_sysp = _sysp; // присвоение глобальной переменной парам-ов сис-мы
lpDeviceBase* dev = init_base_device(n0, MAX_DEVS, saproc); //
инициализация массива устройств
dev[0] = new laba5;
return 1;
}
void __stdcall tact_amplifier(LPDEVPROP dp) // тактовая функция
{
//LPAmplifierWORK lpaw = static_cast<LPAmplifierWORK>(dp->lpw); //
инициализация указателя на рабочую структуру
LPAmplifierPARAM lpap = static_cast<LPAmplifierPARAM>(dp->lpp);
for (int i = 0; i < 8; i++) // логика устройства
*dp->pins[10 + i].f_out = (dp->pins[i + 1].f_in) / lpap->k;
Laba5.h
#ifndef _LABA5_H // одноразовое включение файла
#define _LABA5_H
#include <spectr2/basedevice.h> // необходимые включения
#include <vector>
extern HINSTANCE g_hInst; // "экспорт" переменных в основной файл
extern LPSYSPARAM g_sysp;
void __stdcall tact_amplifier(LPDEVPROP); // объявление тактовой функции
namespace Spectr2
{
// структура параметров устройства
struct AmplifierPARAM {
float k;
};
typedef AmplifierPARAM* LPAmplifierPARAM;
// рабочая структура
struct AmplifierWORK {
};
typedef AmplifierWORK* LPAmplifierWORK;
// описание класса
class laba5 : public DeviceBase {
public:
// инициализация устройства
virtual DWORD init(HWND hWnd)
{
LPAmplifierPARAM lpap =
static_cast<LPAmplifierPARAM>(init_device(sizeof(AmplifierPARAM), 8, 8));
lpap->k = 8.0;
return 1;
}
// запуск устройства
virtual DWORD start(DWORD pin)
{
if (!get_work_ptr())
{
LPAmplifierPARAM lpap =
static_cast<LPAmplifierPARAM>(get_data_ptr());
lpap->k = 8.0;
set_tact_proc(tact_amplifier);
}
return 1;
}
// остановка устройства
virtual void stop(HWND hWnd)
{
//
}
// инициализация пинов
virtual void init_pins(LPDEVPIN in, LPDEVPIN out)
{
for (int i = 0; i < 8; i++)
{
init_pin(in[i + 1], SADF_TIME, "Вход", "Отсчёты", 2);
init_pin(out[i + 1], SADF_TIME, "Выход", 0, 2);
}
}
// отображение названия устройства
virtual void get_name(char* name)
{
set_name(name, "laba5");
}
// местонахождение в дереве устройств
virtual DWORD get_type()
{
return (DBDEV_ROOT_TIME | DBDEV_TIME_OTHER);
}
// диалог с информацией об устройстве
virtual void help(HWND hwnd)
{
MessageBox(hwnd, "Лабораторная работа №5", "", MB_OK |
MB_ICONINFORMATION);
}
};
}
#endif#pragma once
Вывод: Была создана динамическую библиотеку (dll) с 1 радиотехническим
устройством для среды имитационного моделирования Спектр-2. Была
проведена проверка работоспособности.
Download