Tool.cpp 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. #include "stdafx.h"
  2. #include "Tool.h"
  3. #include "ToolDialog.h"
  4. #include "Resource.h"
  5. CToolImpl* m_pDllTool;
  6. DLL_TOOL_DESC m_Description;
  7. ///////////////////////////////////////////////////////////////////
  8. // 获取工具ID
  9. extern "C" __declspec(dllexport) const CString GetGlobalFileID()
  10. {
  11. return KEY;
  12. }
  13. ///////////////////////////////////////////////////////////////////
  14. // 返回工具新实例的指针
  15. extern "C" __declspec(dllexport) const CDllTool* GetToolPtr()
  16. {
  17. //if (m_pDllTool == NULL)
  18. //{
  19. m_pDllTool = new CToolImpl();
  20. //}
  21. return m_pDllTool;
  22. }
  23. ///////////////////////////////////////////////////////////////////
  24. // 获取工具描述
  25. extern "C" __declspec(dllexport) const DLL_TOOL_DESC& Description()
  26. {
  27. // 生成dll描述
  28. m_Description.strCategory = _T("变量工具");
  29. m_Description.strName = _T("Show_Int");
  30. m_Description.strVersion = _T("2.0");
  31. m_Description.strInfo = _T("This Info");
  32. return m_Description;
  33. }
  34. ////////////////////////////////////////////////////////////////////
  35. // 初始化
  36. int CToolImpl::InitTool(CWnd* pParent, CString strTaskName, CString strToolName)
  37. {
  38. AFX_MANAGE_STATE(AfxGetStaticModuleState());
  39. if (m_pDlgTool != NULL)
  40. {
  41. m_pDlgTool->m_strToolName = strToolName;
  42. m_pDlgTool->m_strTaskName = strTaskName;
  43. m_pDlgTool->Create(IDD_DIALOG, CWnd::FromHandle(pParent->GetSafeHwnd()));
  44. m_pDlgTool->ShowWindow(SW_HIDE);
  45. m_Even.hEvenHandle = NULL;
  46. m_Even = m_pDlgTool->GetEvent();
  47. }
  48. return 0;
  49. }
  50. CToolImpl::CToolImpl()
  51. {
  52. AFX_MANAGE_STATE(AfxGetStaticModuleState());
  53. m_pDlgTool = new CToolDialog();
  54. // 生成工具描述
  55. Description();
  56. // 生成接口默认描述
  57. InitDefaultInterfaces();
  58. }
  59. CToolImpl::~CToolImpl()
  60. {
  61. AFX_MANAGE_STATE(AfxGetStaticModuleState());
  62. if (m_pDlgTool != NULL)
  63. {
  64. if (m_pDlgTool->m_hWnd != NULL)
  65. {
  66. m_pDlgTool->DestroyWindow();
  67. }
  68. delete m_pDlgTool;
  69. m_pDlgTool = NULL;
  70. }
  71. if (m_Even.hEvenHandle != NULL)
  72. {
  73. CloseHandle(m_Even.hEvenHandle);
  74. m_Even.hEvenHandle = NULL;
  75. }
  76. }
  77. /////////////////////////////////////////////////
  78. // 生成默认的接口描述
  79. void CToolImpl::InitDefaultInterfaces()
  80. {
  81. // 接口
  82. DLL_INF inf;
  83. inf.strName = _T("Int1");
  84. inf.InfDirection = INF_IN;
  85. inf.InfWay = INF_BY_VALUE;
  86. inf.InfType = INF_VALUE_1;
  87. inf.VarType = VAR_TYPE::Int_Var;
  88. inf.pValue = (LPVOID*)&m_pDlgTool->m_Value;// int *m_Value
  89. inf.bSmartLink = TRUE;
  90. m_Interfaces.push_back(inf);
  91. inf.Reset();//////////////////////////////////////////////////////////////////////////
  92. inf.strName = _T("Int2");
  93. inf.InfDirection = INF_IN;
  94. inf.InfWay = INF_BY_VALUE;
  95. inf.InfType = INF_VALUE_1;
  96. inf.VarType = VAR_TYPE::Int_Var;
  97. inf.pValue = (LPVOID*)&m_pDlgTool->m_Value2;
  98. inf.bSmartLink = FALSE;
  99. m_Interfaces.push_back(inf);
  100. inf.Reset();//////////////////////////////////////////////////////////////////////////
  101. inf.strName = _T("Int");
  102. inf.InfDirection = INF_OUT;
  103. inf.InfWay = INF_BY_VALUE;
  104. inf.InfType = INF_VALUE_1;
  105. inf.VarType = VAR_TYPE::Int_Var;
  106. inf.pValue = (LPVOID*)&m_pDlgTool->m_Value3;
  107. inf.bSmartLink = FALSE;
  108. m_Interfaces.push_back(inf);
  109. inf.Reset();//////////////////////////////////////////////////////////////////////////
  110. }
  111. //系统Run和Stop时调用
  112. void CToolImpl::Running(bool bRun)
  113. {
  114. if (m_pDlgTool->m_hWnd != NULL)
  115. {
  116. m_pDlgTool->Running(bRun);
  117. }
  118. }
  119. // 序列化
  120. void CToolImpl::Serialize(CArchive& ar,const int nExeVersion, const int nDocVersion)
  121. {
  122. AFX_MANAGE_STATE(AfxGetStaticModuleState());
  123. m_pDlgTool->g_nExeVersion = nExeVersion;
  124. m_pDlgTool->g_nDocVersion = nDocVersion;
  125. m_pDlgTool->Serialize(ar);
  126. }
  127. // 显示参数设置对话框
  128. void CToolImpl::ShowDialog(CString strTaskName, CString strToolName)
  129. {
  130. AFX_MANAGE_STATE(AfxGetStaticModuleState());
  131. if (m_pDlgTool!= NULL)
  132. {
  133. m_pDlgTool->BringWindowToTop();
  134. CPoint point;
  135. ::GetCursorPos(&point);
  136. CRect rect;
  137. m_pDlgTool->GetWindowRect(rect);
  138. //m_pDlgTool->SetWindowPos(NULL, point.x - rect.Width() / 2, point.y, -1, -1, SWP_NOSIZE | SWP_NOZORDER);
  139. m_pDlgTool->ShowWindow(SW_SHOW);
  140. m_pDlgTool->SetWindowTextW(strTaskName + _T(" ---> ") + strToolName);
  141. m_pDlgTool->m_strToolName = strToolName;
  142. }
  143. }
  144. // 获取工具的调试显示对象
  145. DEUBGOBJ CToolImpl::GetDeubgDispObj()
  146. {
  147. DEUBGOBJ mObj;
  148. return mObj;
  149. }
  150. int CToolImpl::Execute()
  151. {
  152. // ForTest输出执行的结果信息
  153. m_pDlgTool->Execute();
  154. return 0;
  155. }
  156. // 工具的状态
  157. void CToolImpl::setReceToolStateCallBack(receToolStateCallBack callBack, long long userParam)
  158. {
  159. m_pDlgTool->m_pReceToolStateFunction = callBack;
  160. m_pDlgTool->m_ToolStateUserParam = userParam;
  161. }
  162. ///设置接收Log数据回调函数
  163. void CToolImpl::setReceLogCallBack(receLogCallBack callBack, long long userParam)
  164. {
  165. m_pDlgTool->m_pReceLogFunction = callBack;
  166. m_pDlgTool->m_LogUserParam = userParam;
  167. }
  168. ///设置接收 OnExecute 回调函数
  169. void CToolImpl::setOnExecuteCallBack(receOnExecutegCallBack callBack, long long userParam)
  170. {
  171. m_pDlgTool->m_pReceOnExecuteFunction = callBack;
  172. m_pDlgTool->m_OnExecuteUserParam = userParam;
  173. }
  174. ///设置接收 ToolBusy 回调函数
  175. void CToolImpl::setToolBusyCallBack(receToolBusyCallBack callBack, long long userParam)
  176. {
  177. m_pDlgTool->m_pReceToolBusyFunction = callBack;
  178. m_pDlgTool->m_ToolBusyUserParam = userParam;
  179. }