#include "stdafx.h" #include "Tool.h" #include "ToolDialog.h" #include "Resource.h" CToolImpl* m_pDllTool; DLL_TOOL_DESC m_Description; /////////////////////////////////////////////////////////////////// // 获取工具ID extern "C" __declspec(dllexport) const CString GetGlobalFileID() { return KEY; } /////////////////////////////////////////////////////////////////// // 返回工具新实例的指针 extern "C" __declspec(dllexport) const CDllTool* GetToolPtr() { //if (m_pDllTool == NULL) //{ m_pDllTool = new CToolImpl(); //} return m_pDllTool; } /////////////////////////////////////////////////////////////////// // 获取工具描述 extern "C" __declspec(dllexport) const DLL_TOOL_DESC& Description() { // 生成dll描述 m_Description.strCategory = _T("变量工具"); m_Description.strName = _T("Show_Int"); m_Description.strVersion = _T("2.0"); m_Description.strInfo = _T("This Info"); return m_Description; } //////////////////////////////////////////////////////////////////// // 初始化 int CToolImpl::InitTool(CWnd* pParent, CString strTaskName, CString strToolName) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); if (m_pDlgTool != NULL) { m_pDlgTool->m_strToolName = strToolName; m_pDlgTool->m_strTaskName = strTaskName; m_pDlgTool->Create(IDD_DIALOG, CWnd::FromHandle(pParent->GetSafeHwnd())); m_pDlgTool->ShowWindow(SW_HIDE); m_Even.hEvenHandle = NULL; m_Even = m_pDlgTool->GetEvent(); } return 0; } CToolImpl::CToolImpl() { AFX_MANAGE_STATE(AfxGetStaticModuleState()); m_pDlgTool = new CToolDialog(); // 生成工具描述 Description(); // 生成接口默认描述 InitDefaultInterfaces(); } CToolImpl::~CToolImpl() { AFX_MANAGE_STATE(AfxGetStaticModuleState()); if (m_pDlgTool != NULL) { if (m_pDlgTool->m_hWnd != NULL) { m_pDlgTool->DestroyWindow(); } delete m_pDlgTool; m_pDlgTool = NULL; } if (m_Even.hEvenHandle != NULL) { CloseHandle(m_Even.hEvenHandle); m_Even.hEvenHandle = NULL; } } ///////////////////////////////////////////////// // 生成默认的接口描述 void CToolImpl::InitDefaultInterfaces() { // 接口 DLL_INF inf; inf.strName = _T("Int1"); inf.InfDirection = INF_IN; inf.InfWay = INF_BY_VALUE; inf.InfType = INF_VALUE_1; inf.VarType = VAR_TYPE::Int_Var; inf.pValue = (LPVOID*)&m_pDlgTool->m_Value;// int *m_Value inf.bSmartLink = TRUE; m_Interfaces.push_back(inf); inf.Reset();////////////////////////////////////////////////////////////////////////// inf.strName = _T("Int2"); inf.InfDirection = INF_IN; inf.InfWay = INF_BY_VALUE; inf.InfType = INF_VALUE_1; inf.VarType = VAR_TYPE::Int_Var; inf.pValue = (LPVOID*)&m_pDlgTool->m_Value2; inf.bSmartLink = FALSE; m_Interfaces.push_back(inf); inf.Reset();////////////////////////////////////////////////////////////////////////// inf.strName = _T("Int"); inf.InfDirection = INF_OUT; inf.InfWay = INF_BY_VALUE; inf.InfType = INF_VALUE_1; inf.VarType = VAR_TYPE::Int_Var; inf.pValue = (LPVOID*)&m_pDlgTool->m_Value3; inf.bSmartLink = FALSE; m_Interfaces.push_back(inf); inf.Reset();////////////////////////////////////////////////////////////////////////// } //系统Run和Stop时调用 void CToolImpl::Running(bool bRun) { if (m_pDlgTool->m_hWnd != NULL) { m_pDlgTool->Running(bRun); } } // 序列化 void CToolImpl::Serialize(CArchive& ar,const int nExeVersion, const int nDocVersion) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); m_pDlgTool->g_nExeVersion = nExeVersion; m_pDlgTool->g_nDocVersion = nDocVersion; m_pDlgTool->Serialize(ar); } // 显示参数设置对话框 void CToolImpl::ShowDialog(CString strTaskName, CString strToolName) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); if (m_pDlgTool!= NULL) { m_pDlgTool->BringWindowToTop(); CPoint point; ::GetCursorPos(&point); CRect rect; m_pDlgTool->GetWindowRect(rect); //m_pDlgTool->SetWindowPos(NULL, point.x - rect.Width() / 2, point.y, -1, -1, SWP_NOSIZE | SWP_NOZORDER); m_pDlgTool->ShowWindow(SW_SHOW); m_pDlgTool->SetWindowTextW(strTaskName + _T(" ---> ") + strToolName); m_pDlgTool->m_strToolName = strToolName; } } // 获取工具的调试显示对象 DEUBGOBJ CToolImpl::GetDeubgDispObj() { DEUBGOBJ mObj; return mObj; } int CToolImpl::Execute() { // ForTest输出执行的结果信息 m_pDlgTool->Execute(); return 0; } // 工具的状态 void CToolImpl::setReceToolStateCallBack(receToolStateCallBack callBack, long long userParam) { m_pDlgTool->m_pReceToolStateFunction = callBack; m_pDlgTool->m_ToolStateUserParam = userParam; } ///设置接收Log数据回调函数 void CToolImpl::setReceLogCallBack(receLogCallBack callBack, long long userParam) { m_pDlgTool->m_pReceLogFunction = callBack; m_pDlgTool->m_LogUserParam = userParam; } ///设置接收 OnExecute 回调函数 void CToolImpl::setOnExecuteCallBack(receOnExecutegCallBack callBack, long long userParam) { m_pDlgTool->m_pReceOnExecuteFunction = callBack; m_pDlgTool->m_OnExecuteUserParam = userParam; } ///设置接收 ToolBusy 回调函数 void CToolImpl::setToolBusyCallBack(receToolBusyCallBack callBack, long long userParam) { m_pDlgTool->m_pReceToolBusyFunction = callBack; m_pDlgTool->m_ToolBusyUserParam = userParam; }