exports.cpp 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. // exports.cpp - 7 个 __stdcall 导出函数实现
  2. // 这些函数与原 CommModifyKit.dll 接口完全一致
  3. // 被 CommModifyService/DllWrapper.cpp 通过 GetProcAddress 获取并调用
  4. // 使用 .def 文件确保导出名无修饰(__stdcall 默认会带 _Func@N 修饰)
  5. #include "pch.h"
  6. #include "MonitorManager.h"
  7. #include "Logger.h"
  8. // ============================================================================
  9. // 回调函数指针类型定义(与 DllWrapper.h 中一致)
  10. // DLL 不需要导出这些类型,仅供内部使用
  11. // ============================================================================
  12. typedef LONG(CALLBACK* TOnData)(int Sequence, double dTime,
  13. DWORD ComNumber, DWORD Irp,
  14. DWORD dwSize, char* lpData);
  15. // ============================================================================
  16. // 1. InitMonitor - 初始化监控
  17. // 参数:
  18. // cKey - 授权密钥(宽字符,原默认值 "C09976511B62F0ADB759D87E6906D865")
  19. // aOnData - 事件回调函数指针(DLL 内部事件循环线程会调用)
  20. // 返回:TRUE 表示成功;FALSE 表示失败(错误码通过 get_LastErrror 获取)
  21. // ============================================================================
  22. extern "C"
  23. BOOL __stdcall InitMonitor(wchar_t* cKey, TOnData aOnData) {
  24. std::wstring key = cKey ? std::wstring(cKey) : std::wstring();
  25. bool ok = commkit::GetMonitorManager().InitMonitor(key, aOnData);
  26. return ok ? TRUE : FALSE;
  27. }
  28. // ============================================================================
  29. // 2. Monitor - 开始监控指定串口
  30. // 参数:dwNumber - 串口编号(1 = COM1, 2 = COM2 ...)
  31. // 返回:TRUE 成功;FALSE 失败
  32. // ============================================================================
  33. extern "C"
  34. BOOL __stdcall Monitor(DWORD dwNumber) {
  35. bool ok = commkit::GetMonitorManager().MonitorPort(dwNumber);
  36. return ok ? TRUE : FALSE;
  37. }
  38. // ============================================================================
  39. // 3. Stop - 停止监控指定串口
  40. // 参数:dwNumber - 串口编号
  41. // 返回:TRUE 成功;FALSE 失败
  42. // ============================================================================
  43. extern "C"
  44. BOOL __stdcall Stop(DWORD dwNumber) {
  45. bool ok = commkit::GetMonitorManager().StopPort(dwNumber);
  46. return ok ? TRUE : FALSE;
  47. }
  48. // ============================================================================
  49. // 4. SetWrite_Data - 向指定串口写数据
  50. // 参数:
  51. // dwNumber - 串口编号
  52. // lpBuffer - 数据缓冲区
  53. // Len - 数据长度(字节)
  54. // 返回:TRUE 成功;FALSE 失败
  55. // ============================================================================
  56. extern "C"
  57. BOOL __stdcall SetWrite_Data(DWORD dwNumber, char* lpBuffer, int Len) {
  58. bool ok = commkit::GetMonitorManager().WriteData(dwNumber, lpBuffer, Len);
  59. return ok ? TRUE : FALSE;
  60. }
  61. // ============================================================================
  62. // 5. SetRead_Data - 从指定串口发起异步读请求
  63. // 参数:
  64. // dwNumber - 串口编号
  65. // lpBuffer - 数据缓冲区(部分语义下传入预期数据,由驱动透传给设备)
  66. // Len - 数据长度(字节)
  67. // 返回:TRUE 表示请求已提交;FALSE 表示请求失败
  68. // 注意:实际读到的数据通过 TOnData 回调以 OP_READ 事件上抛
  69. // ============================================================================
  70. extern "C"
  71. BOOL __stdcall SetRead_Data(DWORD dwNumber, char* lpBuffer, int Len) {
  72. bool ok = commkit::GetMonitorManager().ReadData(dwNumber, lpBuffer, Len);
  73. return ok ? TRUE : FALSE;
  74. }
  75. // ============================================================================
  76. // 6. FreeMonitor - 释放监控资源
  77. // 解绑所有端口、停止事件循环、关闭驱动设备
  78. // 不卸载驱动服务(服务在系统生命周期内常驻)
  79. // ============================================================================
  80. extern "C"
  81. void __stdcall FreeMonitor(void) {
  82. commkit::GetMonitorManager().FreeAll();
  83. }
  84. // ============================================================================
  85. // 7. get_LastErrror - 获取最近一次操作的错误码
  86. // 注意:函数名拼写与原 DLL 一致(3 个 r)
  87. // 返回:错误码(见 CommWrapperBase.h 错误码表)
  88. // ============================================================================
  89. extern "C"
  90. int __stdcall get_LastErrror(void) {
  91. return commkit::GetMonitorManager().GetLastError();
  92. }