hbs_biscuit 中科软科技股份有限公司 CRM 事业部 技术总监  2014年12月10日
关于 进程外 COM 服务器的 生命周期
问题是这样的: 我要写一个 音视频的控制器,被网页控制。
由于控制器比较复杂,在 浏览器中生存不太靠谱。
所以我用 ATL 写了一个EXE 的 COM.
主模块 继承于 ATL::CAtlExeModuleT

然后构建了一个对象

lass ATL_NO_VTABLE CSipPhoneControl :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CSipPhoneControl, &CLSID_SipPhoneControl>,
public IConnectionPointContainerImpl<CSipPhoneControl>,
public CProxy_ISipPhoneControlEvents<CSipPhoneControl>,
public IDispatchImpl<ISipPhoneControl, &IID_ISipPhoneControl, &LIBID_VISSipPhoneLib, /*wMajor =*/ 1, /*wMinor =*/ 0>,
同时 指定宏 DECLARE_CLASSFACTORY_SINGLETON 做单实例。

在 WEB 中 嵌入一个 activex 作为客户端调用这个对象,目前控制非常好 ,方法调用和接收事件都可以 。

我的问题是: 当客户端都关闭后 我的这个 EXE 的com 实例也就销毁了,exe也就消失了,我有没有什么办法 保持这个COM 实例不销毁 ,需要在这个EXE com中 做哪些操作。

另外处于某些控制需求,可能需要我在这个EXECOM 中 控制关闭这个com 实例,我目前只能先 FIRE 一个事件通知所有的客户端,然后客户端都将连接点断开,并release, 若 某个客户端不release这个com 我就只能干等着,有没有办法,在EXE中硬性都release掉,优雅的关闭这个COM 呢 。

...全文
338 点赞 收藏 8
写回复
8 条回复

还没有回复,快来抢沙发~

发动态
发帖子
ATL
创建于2007-09-28

3021

社区成员

4.8w+

社区内容

ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区公告
暂无公告