关于 进程外 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 呢 。
相关推荐
atl,com,进程外服务器
COM+服务:Windows的COM+框架提供了更高级的服务,如事务管理、安全性、生命周期管理等,可以与ATL结合使用,以实现更复杂的服务和组件配置。
OPC DA工具包实战:从COM接口到数据采集服务器部署
工业现场的设备数据如何高效接入MES与组态软件?OPC DA作为实时数据交换的经典规范,将设备驱动层与上层应用解耦,是工业数据采集领域的高频技术关键词。但其底层基于COM,直接开发需要掌握IOPCItemMgt、连接点、COM注册等复杂细节。通过封装OPC Kernel,开发者可以基于标签管理、数据刷新与回调注册三个核心动作,快速构建符合OPC DA 2.04规范的进程外EXE服务器,显著降低PLC、仪表等设备接入的工程门槛。文章围绕服务器生命周期、质量字位结构、批量刷新机制、COM部署与验证清单展开,系统
实现与掌握COM进程外组件的简易教程
接口定义语言(IDL)对于开发COM组件来说至关重要,因为它允许开发者定义可以在不同编程语言之间共享的接口。IDL文件作为COM组件之间通信的桥梁,确保了接口的标准化描述。IDL描述了组件如何与外界通信,它是一种语言无关的描述方式,允许编译器生成不同语言版本的代理和存根代码。这使得COM组件能够被不同的语言调用,增加了组件的可重用性和互操作性。类厂是一个特殊的COM对象,它实现了接口。这个接口有两个主要方法:和LockServer。通过这些方法,类厂可以控制如何创建组件实例。
ATL创建进程外COM组件服务(C++)
该项目使用ATL框架在C++中创建进程外COM组件服务,包含模块初始化、接口定义与注册机制。核心文件实现COM对象的生命周期管理、接口方法调用及代理存根通信,支持本地服务器模式下的RegServer/
COM实例代码
进程外组件 (Out-of-Process Component)进程外组件运行在独立的进程,通常是一个COM服务器,如Windows服务或exe。这样可以隔离故障,但会增加一些通信开销。


