Tool.cpp 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  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("Get_Int");
  30. m_Description.strAliasName = _T("Get_Int");
  31. m_Description.strVersion = _T("2.0");
  32. m_Description.strInfo = _T("This Info");
  33. return m_Description;
  34. }
  35. ////////////////////////////////////////////////////////////////////
  36. // 初始化
  37. int CToolImpl::InitTool(CWnd* pParent, CString strTaskName, CString strToolName)
  38. {
  39. AFX_MANAGE_STATE(AfxGetStaticModuleState());
  40. if (m_pDlgTool != NULL)
  41. {
  42. m_pDlgTool->m_strToolName = strToolName;
  43. m_pDlgTool->m_strTaskName = strTaskName;
  44. m_pDlgTool->Create(IDD_DIALOG, CWnd::FromHandle(pParent->GetSafeHwnd()));
  45. m_pDlgTool->ShowWindow(SW_HIDE);
  46. m_Even.hEvenHandle = NULL;
  47. m_Even = m_pDlgTool->GetEvent();
  48. }
  49. return 0;
  50. }
  51. CToolImpl::CToolImpl()
  52. {
  53. AFX_MANAGE_STATE(AfxGetStaticModuleState());
  54. m_pDlgTool = new CToolDialog();
  55. // 生成工具描述
  56. Description();
  57. // 生成接口默认描述
  58. InitDefaultInterfaces();
  59. }
  60. CToolImpl::~CToolImpl()
  61. {
  62. AFX_MANAGE_STATE(AfxGetStaticModuleState());
  63. if (m_pDlgTool != NULL)
  64. {
  65. if (m_pDlgTool->m_hWnd != NULL)
  66. {
  67. m_pDlgTool->DestroyWindow();
  68. }
  69. delete m_pDlgTool;
  70. m_pDlgTool = NULL;
  71. }
  72. if (m_Even.hEvenHandle != NULL)
  73. {
  74. CloseHandle(m_Even.hEvenHandle);
  75. m_Even.hEvenHandle = NULL;
  76. }
  77. }
  78. /////////////////////////////////////////////////
  79. // 生成默认的接口描述
  80. void CToolImpl::InitDefaultInterfaces()
  81. {
  82. // 接口
  83. DLL_INF inf;
  84. inf.strName = _T("Int0");
  85. inf.InfDirection = INF_OUT;
  86. inf.InfType = INF_VALUE_1;
  87. inf.InfWay = INF_BY_VALUE;
  88. inf.VarType = VAR_TYPE::float_Var;
  89. inf.pValue = (LPVOID*)&m_pDlgTool->m_Value1;
  90. inf.bSmartLink = TRUE;
  91. inf.bShow = TRUE;
  92. m_Interfaces.push_back(inf);
  93. inf.Reset();//////////////////////////////////////////////////////////////////////////
  94. inf.strName = _T("Int1");
  95. inf.InfDirection = INF_OUT;
  96. inf.InfType = INF_VALUE_1;
  97. inf.InfWay = INF_BY_VALUE;
  98. inf.VarType = VAR_TYPE::Int_Var;
  99. inf.pValue = (LPVOID*)&m_pDlgTool->m_Value;
  100. inf.bSmartLink = TRUE;
  101. inf.bShow = TRUE;
  102. m_Interfaces.push_back(inf);
  103. inf.Reset();//////////////////////////////////////////////////////////////////////////
  104. inf.strName = _T("TT");
  105. inf.InfDirection = INF_OUT;
  106. inf.InfType = INF_VALUE_1;
  107. inf.InfWay = INF_BY_VALUE;
  108. inf.VarType = VAR_TYPE::HTuple_Var;
  109. inf.pValue = (LPVOID*)&m_pDlgTool->m_hvTestValue;
  110. inf.bSmartLink = TRUE;
  111. inf.bShow = TRUE;
  112. m_Interfaces.push_back(inf);
  113. inf.Reset();//////////////////////////////////////////////////////////////////////////
  114. }
  115. //系统Run和Stop时调用
  116. void CToolImpl::Running(bool bRun)
  117. {
  118. if (m_pDlgTool->m_hWnd != NULL)
  119. {
  120. m_pDlgTool->Running(bRun);
  121. }
  122. }
  123. // 序列化
  124. void CToolImpl::Serialize(CArchive& ar,const int nExeVersion, const int nDocVersion)
  125. {
  126. AFX_MANAGE_STATE(AfxGetStaticModuleState());
  127. m_pDlgTool->g_nExeVersion = nExeVersion;
  128. m_pDlgTool->g_nDocVersion = nDocVersion;
  129. m_pDlgTool->Serialize(ar);
  130. }
  131. // 显示参数设置对话框
  132. void CToolImpl::ShowDialog(CString strTaskName, CString strToolName)
  133. {
  134. AFX_MANAGE_STATE(AfxGetStaticModuleState());
  135. if (m_pDlgTool->m_hWnd != NULL)
  136. {
  137. m_pDlgTool->BringWindowToTop();
  138. CPoint point;
  139. ::GetCursorPos(&point);
  140. CRect rect;
  141. m_pDlgTool->GetWindowRect(rect);
  142. //m_pDlgTool->SetWindowPos(NULL, point.x - rect.Width() / 2, point.y, -1, -1, SWP_NOSIZE | SWP_NOZORDER);
  143. m_pDlgTool->ShowWindow(SW_SHOW);
  144. m_pDlgTool->SetWindowTextW(strTaskName + _T(" ---> ") + strToolName);
  145. m_pDlgTool->m_strToolName = strToolName;
  146. }
  147. }
  148. // 获取工具的调试显示对象
  149. DEUBGOBJ CToolImpl::GetDeubgDispObj()
  150. {
  151. DEUBGOBJ mObj;
  152. return mObj;
  153. }
  154. int CToolImpl::Execute()
  155. {
  156. // ForTest输出执行的结果信息
  157. int nStatus = 0;
  158. if (m_pDlgTool->m_hWnd != NULL)
  159. {
  160. nStatus = m_pDlgTool->Execute();
  161. }
  162. // CString strTip;
  163. // strTip.Format(_T("Tool - %s\nInterface - %s\nExecute output:%d\n"),
  164. // m_Description.strName, m_Description.Interfaces[0].strName, m_Value1);
  165. // AfxMessageBox(strTip, MB_ICONINFORMATION);
  166. return nStatus;
  167. }
  168. // 工具的状态
  169. void CToolImpl::setReceToolStateCallBack(receToolStateCallBack callBack, long long userParam)
  170. {
  171. m_pDlgTool->m_pReceToolStateFunction = callBack;
  172. m_pDlgTool->m_ToolStateUserParam = userParam;
  173. }
  174. ///设置接收Log数据回调函数
  175. void CToolImpl::setReceLogCallBack(receLogCallBack callBack, long long userParam)
  176. {
  177. m_pDlgTool->m_pReceLogFunction = callBack;
  178. m_pDlgTool->m_LogUserParam = userParam;
  179. }
  180. ///设置接收 OnExecute 回调函数
  181. void CToolImpl::setOnExecuteCallBack(receOnExecutegCallBack callBack, long long userParam)
  182. {
  183. m_pDlgTool->m_pReceOnExecuteFunction = callBack;
  184. m_pDlgTool->m_OnExecuteUserParam = userParam;
  185. }
  186. ///设置接收 ToolBusy 回调函数
  187. void CToolImpl::setToolBusyCallBack(receToolBusyCallBack callBack, long long userParam)
  188. {
  189. m_pDlgTool->m_pReceToolBusyFunction = callBack;
  190. m_pDlgTool->m_ToolBusyUserParam = userParam;
  191. }