#pragma once #include "CommWrapperBase.h" #include "Utils.h" #include #include #include #include #include #include // DLL函数指针类型定义 typedef LONG(CALLBACK* TOnData)(int Sequence, double dTime, DWORD ComNumber, DWORD Irp, DWORD dwSize, char* lpData); typedef BOOL(CALLBACK* TInitMonitor)(LPCWSTR cKey, TOnData lpDataProc); typedef BOOL(CALLBACK* TMonitor)(DWORD dwNumber); typedef BOOL(CALLBACK* TStop)(DWORD dwNumber); typedef BOOL(CALLBACK* TSetWrite_Data)(DWORD dwNumber, char* lpBuffer, int Len); typedef BOOL(CALLBACK* TSetRead_Data)(DWORD dwNumber, char* lpBuffer, int Len); typedef void(CALLBACK* TFreeMonitor)(void); typedef int(CALLBACK* Tget_LastErrror)(void); // 使用基类定义的事件类型、数据结构和回调函数类型 // enum class DllEventType -> CommEventType // struct DllEventData -> CommEventData // using DllEventCallback -> CommEventCallback class DllWrapper : public CommWrapperBase { private: HINSTANCE dll_handle_; TInitMonitor init_monitor_; TMonitor start_monitor_; TStop stop_monitor_; TSetWrite_Data set_write_data_; TSetRead_Data set_read_data_; TFreeMonitor free_monitor_; Tget_LastErrror get_last_error_; // DLL事件回调 CommEventCallback dll_event_callback_; // DLL事件回调函数 static LONG CALLBACK OnMonitorEx(int Sequence, double dTime, DWORD ComNumber, DWORD Irp, DWORD dwSize, char* lpData); public: DllWrapper(); ~DllWrapper(); // 初始化DLL bool Initialize() override; // 释放资源 void Cleanup() override; // 初始化监控 bool InitMonitor(const std::string& key = "C09976511B62F0ADB759D87E6906D865") override; // 监控端口 bool MonitorPort(int port) override; // 停止监控端口 bool StopPort(int port) override; // 读数据 bool ReadData(int port, const std::string& hex_data) override; // 写数据 bool WriteData(int port, const std::string& hex_data) override; // 释放监控 bool FreeMonitor() override; // 获取最后错误 int GetLastError() override; // 设置事件回调 void SetEventCallback(CommEventCallback callback) override; // 获取错误信息 std::string GetErrorMessage(int error_code) override; // 检查端口是否正在监控 bool IsPortMonitored(int port) override; };