| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- #pragma once
- #include "CommWrapperBase.h"
- #include "Utils.h"
- #include <windows.h>
- #include <string>
- #include <vector>
- #include <functional>
- #include <map>
- #include <mutex>
- // 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;
- };
|