关于 进程外 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 呢 。