ФЕДЕРАЛЬНОЕ АГЕНСТВО СВЯЗИ ордена Трудового Красного Знамени федеральное государственное бюджетное образовательное учреждение высшего образования МОСКОВСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ СВЯЗИ И ИНФОРМАТИКИ Лабораторная работа № 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. Была проведена проверка работоспособности.