VC 自动控制问题,自己写的程序,采用CreateDispatch方式让另一个程序自动控制。如何实现每次调用CreateDispatch时创建一个程序进程?

zx0304 2019-07-26 10:03:48
在客户端中调用:
iii = m_Server.CreateDispatch(_T("Gui.ServerCore"),&pError);
int b=m_Server.OpenFile(filename);
如果服务程序已经启动,调用CreateDispatch成功,但是没有单独启动一个服务程序,而是控制的已经启动的服务程序。
想实现的是:每次调用CreateDispatch时 ,能单独启动一个服务器进程,每个m_Server控制不同的服务程序进程。
求助各位大神,
...全文
281 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zgl7903 2019-07-27
  • 打赏
  • 举报
回复
不好意思哈, 有点误导你了, 我刚试了下MDI的,确实是只创建了一个进程,具体原因还没时间深究
zx0304 2019-07-27
  • 打赏
  • 举报
回复
@zgl7903 非常感谢您的回复
zx0304 2019-07-26
  • 打赏
  • 举报
回复
@zgl7903 : IOleSvrPtr是怎么定义的?我创建的mfc 对话框程序,实现自动化中没有这种指针呀?
zgl7903 2019-07-26
  • 打赏
  • 举报
回复
就是个普通的MFC向导生成的支持自动化的App, 没什么特别
zx0304 2019-07-26
  • 打赏
  • 举报
回复
@zgl7903 : IOleSvrPtr是怎么定义的?能发一个完整的例子吗?
zgl7903 2019-07-26
  • 打赏
  • 举报
回复
我测试的没有问题

  IOleSvrPtr pApp[10];
  for(int i=0; i<10; i++)
  {
    HRESULT hr =  pApp[i].CreateInstance(_T("OleSvr.Application"));
    ASSERT(hr == S_OK);
  }
  Sleep(10000);

  for(int i=0; i<10; i++)
  {
    pApp[i].Release();
  }
zx0304 2019-07-26
  • 打赏
  • 举报
回复
//通过注册表访问,在Gui.cpp的RegisterBkf()函数中实现注册

用import方法导入文件提示:1>e:\autotest2\autotest2dlg.cpp(12) : fatal error C1083: 无法打开类型库文件:“e:\bin\open.exe”: 加载类型库/DLL 时出错。
zx0304 2019-07-26
  • 打赏
  • 举报
回复
class CServerCore : public CCmdTarget
{
DECLARE_DYNCREATE(CServerCore)

public:
CServerCore();
virtual ~CServerCore();

virtual void OnFinalRelease();

protected:
DECLARE_MESSAGE_MAP()
DECLARE_OLECREATE(CServerCore)
DECLARE_DISPATCH_MAP()
DECLARE_INTERFACE_MAP()
public:
afx_msg int OpenFile(LPCTSTR fileName);//打开某流程文件
afx_msg int Run();//运行流程
afx_msg int IsRunning();//是否在运行流程
afx_msg int Reinitialize();//初始化流程
afx_msg int Exit();//关闭模拟软件
afx_msg int GetBlockList(VARIANT* names);//获取所有的单元模块名字列表
afx_msg int GetBlock(LPCTSTR blockName, IDispatch** dispatch);//获取单元模块控制接口
afx_msg int GetStreamList(VARIANT* names);//获取所有的流股名字列表
afx_msg int GetStream(LPCTSTR streamName, IDispatch** dispatch);//获取流股(物流、能流、功流)控制接口
//新添加
afx_msg int SaveFile();//保存文件,前提必须是打开的某个存在的文件
afx_msg int SaveAs(LPCTSTR fileName);//保存到文件到特定目录
afx_msg int GetRunMessage(VARIANT* msg);//获取流程求解提示信息
afx_msg int GetCalculatingBlocks(VARIANT* blockIds);//获取正在被求解的单元模块ID数组
afx_msg int GetCalculationStatus(int* status);//流程的计算状态,参见独立标准
afx_msg int Terminate();
};
zx0304 2019-07-26
  • 打赏
  • 举报
回复
我的服务器程序是MFC 多文档程序,又手动添加的支持自动化,实现了class CServerCore : public CCmdTarget
zgl7903 2019-07-26
  • 打赏
  • 举报
回复
#import 方式引入就有

#import "..\Debug\OleSvr.exe" no_namespace

// CSvrTestDlg 消息处理程序

BOOL CSvrTestDlg::OnInitDialog()
{
  CDialog::OnInitDialog();

  // TODO: 在此添加额外的初始化代码
  
  IOleSvrPtr pApp[10];
  for(int i=0; i<10; i++)
  {
    HRESULT hr =  pApp[i].CreateInstance(_T("OleSvr.Application"));
    ASSERT(hr == S_OK);
  }
  Sleep(10000);

  for(int i=0; i<10; i++)
  {
    pApp[i].Release();
  }

  return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧