// exports.cpp - 7 个 __stdcall 导出函数实现 // 这些函数与原 CommModifyKit.dll 接口完全一致 // 被 CommModifyService/DllWrapper.cpp 通过 GetProcAddress 获取并调用 // 使用 .def 文件确保导出名无修饰(__stdcall 默认会带 _Func@N 修饰) #include "pch.h" #include "MonitorManager.h" #include "Logger.h" // ============================================================================ // 回调函数指针类型定义(与 DllWrapper.h 中一致) // DLL 不需要导出这些类型,仅供内部使用 // ============================================================================ typedef LONG(CALLBACK* TOnData)(int Sequence, double dTime, DWORD ComNumber, DWORD Irp, DWORD dwSize, char* lpData); // ============================================================================ // 1. InitMonitor - 初始化监控 // 参数: // cKey - 授权密钥(宽字符,原默认值 "C09976511B62F0ADB759D87E6906D865") // aOnData - 事件回调函数指针(DLL 内部事件循环线程会调用) // 返回:TRUE 表示成功;FALSE 表示失败(错误码通过 get_LastErrror 获取) // ============================================================================ extern "C" BOOL __stdcall InitMonitor(wchar_t* cKey, TOnData aOnData) { std::wstring key = cKey ? std::wstring(cKey) : std::wstring(); bool ok = commkit::GetMonitorManager().InitMonitor(key, aOnData); return ok ? TRUE : FALSE; } // ============================================================================ // 2. Monitor - 开始监控指定串口 // 参数:dwNumber - 串口编号(1 = COM1, 2 = COM2 ...) // 返回:TRUE 成功;FALSE 失败 // ============================================================================ extern "C" BOOL __stdcall Monitor(DWORD dwNumber) { bool ok = commkit::GetMonitorManager().MonitorPort(dwNumber); return ok ? TRUE : FALSE; } // ============================================================================ // 3. Stop - 停止监控指定串口 // 参数:dwNumber - 串口编号 // 返回:TRUE 成功;FALSE 失败 // ============================================================================ extern "C" BOOL __stdcall Stop(DWORD dwNumber) { bool ok = commkit::GetMonitorManager().StopPort(dwNumber); return ok ? TRUE : FALSE; } // ============================================================================ // 4. SetWrite_Data - 向指定串口写数据 // 参数: // dwNumber - 串口编号 // lpBuffer - 数据缓冲区 // Len - 数据长度(字节) // 返回:TRUE 成功;FALSE 失败 // ============================================================================ extern "C" BOOL __stdcall SetWrite_Data(DWORD dwNumber, char* lpBuffer, int Len) { bool ok = commkit::GetMonitorManager().WriteData(dwNumber, lpBuffer, Len); return ok ? TRUE : FALSE; } // ============================================================================ // 5. SetRead_Data - 从指定串口发起异步读请求 // 参数: // dwNumber - 串口编号 // lpBuffer - 数据缓冲区(部分语义下传入预期数据,由驱动透传给设备) // Len - 数据长度(字节) // 返回:TRUE 表示请求已提交;FALSE 表示请求失败 // 注意:实际读到的数据通过 TOnData 回调以 OP_READ 事件上抛 // ============================================================================ extern "C" BOOL __stdcall SetRead_Data(DWORD dwNumber, char* lpBuffer, int Len) { bool ok = commkit::GetMonitorManager().ReadData(dwNumber, lpBuffer, Len); return ok ? TRUE : FALSE; } // ============================================================================ // 6. FreeMonitor - 释放监控资源 // 解绑所有端口、停止事件循环、关闭驱动设备 // 不卸载驱动服务(服务在系统生命周期内常驻) // ============================================================================ extern "C" void __stdcall FreeMonitor(void) { commkit::GetMonitorManager().FreeAll(); } // ============================================================================ // 7. get_LastErrror - 获取最近一次操作的错误码 // 注意:函数名拼写与原 DLL 一致(3 个 r) // 返回:错误码(见 CommWrapperBase.h 错误码表) // ============================================================================ extern "C" int __stdcall get_LastErrror(void) { return commkit::GetMonitorManager().GetLastError(); }