关于 进程外 COM 服务器的 生命周期

hbs_biscuit CSDN会员 hbs_biscuit 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
问题是这样的: 我要写一个 音视频的控制器,被网页控制。
由于控制器比较复杂,在 浏览器中生存不太靠谱。
所以我用 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。这样可以隔离故障,但会增加一些通信开销。

dmyth
评论 8
收藏 已收藏
分享
返回顶部
hbs_biscuit CSDN会员
ATL 3,248 成员 48,530 内容