#pragma once typedef struct MODULE_DATA { void* pModule; int lMsgId; int lDataLen; char acData[4]; }*pMODULE_DATA; void g_PipeCallBack(void* pObj, int lMsgId,WPARAM wparam, LPARAM lparam); #define WM_MODULE_DATA_ID (WM_USER + 666) #define WM_MODULE_CONNECT_ID (WM_USER + 667) #define WM_UPDATE_MODULE_STATUS (WM_USER + 20668) class CModuleProcess { friend void g_PipeCallBack(void* pObj, int lMsgId, WPARAM wparam, LPARAM lparam); public: //hWnd收到子模块消息时转发的目标窗口, CModuleProcess(CAgvMainDialog *pMainWnd, CString strModulePath, CString strModuleName, int lModuleIndex); ~CModuleProcess(void); void SetPipeName(CString strPipeName) { m_strPipeName = strPipeName; } //启动模块 BOOL Start(int nDebug=0); //停止模块 void Stop(); //获取当前模块状态太0 未启动,1已启动 BOOL GetStatus(); //发送数据到模块进程 BOOL SendDataToModule(int lMsgId, const char* pData, int lLen); //控制线程 void ProcessManageThr(); CRect GetRect(){return m_rect;} void SetRect(CRect rect){m_rect = rect;} CString GetModulePath() { return m_strModulePath; } CString GetModuleName() { return m_strModuleName; } BOOL GetConnectState(){return m_bIsConnectModule;} VOID SetConnectState(BOOL bState){m_bIsConnectModule = bState;} CHttpClient m_httpClent; CAgvMainDialog *m_pAgvMainWnd; int m_lModuleIndex; int m_nDebug; int m_lReStartCount; int m_lState;//0 未启动,1已启动,2稍后重启 protected: //和模块进程通讯的管道回调函数: //1、lparam > 0时,wparam为数据内容,lparam为数据长度 //2、lparam:-1管道连接成功,-2管道断开,-3管道异常 void PipeCallBack(int lMsgId, WPARAM wparam, LPARAM lparam); //启动一次应用,被管理线程调用 BOOL StartModule(); private: CString m_strModulePath; CString m_strModuleName; CCEXPipeServerBase* m_pstPipeServer; HANDLE m_hProcessManageThr; BOOL m_bAcitv; HWND m_hWnd; CRect m_rect;//模块所占用的矩形框位置 CString m_strPipeName; PROCESS_INFORMATION m_pi; //进程信息结构 BOOL m_bIsConnectModule; };