CComObjectRootEx类

通过ATL开发COM_2实现IUnknown接口 每个COM组件需要实现这三个功能1. 实现IUnknown接口 (通过 CComObjectRootEx 实现)2. 实现一个类工厂,支持组件的创建 (通过 CComCoClass 实现)3. 实现自注册 ATL是如何实现IUnknown接口的? 组件通过派生CComObjectRootEx 获得 IUnknown支持template class CComObj 阅读详情

该类处理聚合和非聚合对象的对象引用记数管理。对于非聚合对象它拥有对象的引用记数
对于聚合对象它拥有一个指向外部unknown的指针。对于聚合对象来说,CComOjbectRootEx
可以用来处理内部对象构造失败并保护外部对象在内部接口被释放或删除的时候不被删除。
template< class ThreadModel >
class CComObjectRootEx : public CComObjectRootBase
参数:
ThreadModel:
     一个实现了期望线程模式的类。你能够明确地通过设置ThreadModel为CComSingleThreadModel,CComMultiThreadModel,CComMultiThreadModelNoCS来选择线程模型。你能够接受服务器设置的现成模型CComObjectThreadModel或CComGlobalsThreadModel为默认线程模型。

备注:
 一个实现COM服务器的类必须实现CComObjectRootEx或CComObjectRoot. 如果你的类声明指定DECLARE_POLY_AGGREATABLE宏,ATL在IClassFactory::CreateInstance被调用的时候创建一个CComPolyObject<CYourClass>的实例。在创建过程中,外部unknown的值被检查。如果它是NULL,IUnkknown被实现为一个非聚合的对象,如果外部unkonwn是非NULL,IUnknown实现为一个聚合对象。
如果你的类并没有指定DECLARE_POLY_AGGREATABLE宏,ATL为聚合对象创建一个ComObject<CYourClass>的实例,为非聚合类创建一个CComAggObject<CYourClass>对象的实例。CComPolyObject的好处就是可以让你避免在你的模块中为处理聚合和非聚合情况而使用CComAggObject和CComObject.一个CComPolyObject对象就可以处理这两种情况,因此你的代码中仅仅存在一份虚表和一份函数。如果虚表很大,这能够明显的减少你模块的大小。然而,如果你的虚表很小,使用CComPolyObject能够导致稍微较大的模块,因为这种情况下并没有针对聚合和非聚合对象想CComAggObject和CComObject那样的优化处理。
当你使用ATL对象助手创建一个完全控件或IE控件的时候,DECLARE_POLY_AGGREGATABLE宏将自动的添加到你的类定义中。
如果你的对象是聚合的,IUNKNOWN被CComAggObject和CComPolyObject实现,这些类代理ueryInterface,
AddRef和Release来调用CComObjectRootEx的OuterQueryInterface,OuterAddRef和OuterRelease方法来转发给外部的unknown。典型的在你的类中重载CComObjectRootEx::FinalConstruct 来创建任何聚合对象重载CComObjectRootEx::FinalRelease来释放任何聚合对象。
如果你的对象不是一个聚合对象,IUnknown通过CComObject或CComPolyObject实现,这种情况下,调用
QueryInterface,AddRef,Release被调用CComObjectRootEx的InternalQueryInterface,InternalAddRef,和InternalRelease 来执行实际的操作。

要求:

Windows CE versions: 2.0 and later
Header file: Declared in Atlcom.h

COM组件开发(六)——使用ATL开发COM组件 使用ATL开发COM组件           使用ATL开发COM组件之前,要对几个重要的类进行说明:           CComModule           这是ATL的中心模块类,它的作用有点像MFC中的CWinApp,但没有后者那么庞大。它和它导出的类主要负责处理引用技术、在本地服务器内的类厂注册以及管理自动注册和自动反注册的注册表管理程序间的协调。若要创建进程内组件,只需直接使 阅读详情

相关推荐

通过ATL开发COM概述

ATL 是为了减轻程序员开发COM的负担而提供的一套模板库 ATL提供的支持: 1. CComModule封装对组件的宿主支持,掩盖了(DLL和EXE)之间的差别。 2. 对IUnknown的支持 3. 对类工厂的支持 4. 自动化 : IDispatchImpl COM 数据类型 : CComBSTR, CComVariant 接口指针 : CComPtr, CComQIPtr

tianyu的专栏 - Linux site:blog.youkuaiyun.com/wishfly 1109

ATL 类的理解

自己的类从 CComObjectRoot ,CComCoClass派生,  CComObject又从自己写的类派生 CComModel类模块的中心类,不区分进程内和本地组件。如果是本地组件则必须建立一个CComModule子类。 本地组件在引用计数为0时需要退出。 CComObjectRoot/CComObjectRootEx,任何ATL Com组件都必须从此类继承。想起IUnknown,而

yuan_hs_hf的专栏 936

通过ATL实现IUnknown接口

每个COM组件需要实现这三个功能 1. 实现IUnknown接口 (通过 CComObjectRootEx 实现) 2. 实现一个类工厂,支持组件的创建 (通过 CComCoClass 实现) 3. 实现自注册   ATL是如何实现IUnknown接口的?   组件通过派生CComObjectRootEx 获得 IUnknown支持 [cpp] view plain

tianyu的专栏 - Linux site:blog.youkuaiyun.com/wishfly 1387

ATL 核心COM继承类之CComObjectRootEx及CComObjectLock

参考: ATL 临界区 ATL 引用计数线程模型 CComObjectRootEx Manages reference counting for both aggregated and nonaggregated objects. Allows you to specify a threading model. ...

weixin_30621959的博客 184

ATL中界面类的使用

ATL中界面类的使用 ATL中界面类的使用 ATL中界面类的使用

STM32 伺服电机 指令脉冲+方向位置控制模式 主从定时器 实现PWM脉冲数精确控制

实验室有个项目涉及到多个步进电机以及伺服电机的控制,需要电机得到一个触发信号后精确移动一段距离。 下面以单个伺服电机控制为例,利用伺服电机的指令脉冲加方向位置控制模式实现jing'que ...

phcdd的博客 2万+

ATL学习笔记(3): QueryInterface功能的实现

在CComObjectRootEx类中,实现了线程安全的引用计数管理。而在CComObjectRootEx的父类CComObjectRootBase中,存在对QueryInterface的一个内部实现——InternalQueryface()。1. CComObjectRootBase类class CComObjectRootBase{public:    ......    static

东方未明 3908

手把手教你用nRF52832+RFX2401C设计远距离蓝牙模块(附完整原理图/PCB文件)

本文详细介绍了如何利用nRF52832 SoC与RFX2401C射频前端芯片设计远距离蓝牙模块,涵盖芯片选型、阻抗匹配、PCB布局等关键环节。通过实战指南和完整原理图/PCB文件,帮助工程师实现输出功率可达20dBm的蓝牙模块设计,适用于智能家居、运动追踪等物联网应用。

weixin_29214199的博客 287

CComObjectRootEx类 .

该类处理聚合和非聚合对象的对象引用记数管理。对于非聚合对象它拥有对象的引用记数 对于聚合对象它拥有一个指向外部unknown的指针。对于聚合对象来说,CComOjbectRootEx 可以用来处理内部对象构造失败并保护外部对象在内部接口被释放或删除的时候不被删除。 template class CComObjectRootEx : public CComObjectRootBase 参

newlist的专栏 3775

噪声整形与过采样实战:从N-bit ADC到DSM的SQNR优化指南

本文深入探讨了噪声整形与过采样技术在DSM(Delta-Sigma调制器)中的应用,重点分析了量化器位数(N)、滤波器阶数(L)和过采样率(OSR)对SQNR优化的影响。通过实战案例和参数协同优化策略,帮助工程师在音频处理和通信系统设计中实现更优的信号质量。

weixin_42561040的博客 340

LDPC码介绍:基础&编码&译码

本博客介绍了LDPC码的基本原理,其中包括校验矩阵的构造、Tanner 图和编译码的基础知识。

渺小的颗星的博客 4309

the CComObjectRootEx

template class CComObjectRootEx : public CComObjectRootBase { public:  typedef ThreadModel _ThreadModel;  typedef typename _ThreadMode

xhn1986的专栏 826

BLDC方波控制 vs. FOC:技术选型指南与未来演进

本文深入对比BLDC电机方波控制与FOC技术的核心差异,分析两者在成本、性能和应用场景上的权衡。方波控制凭借低成本和易实现性,在电动工具和家电领域优势明显;而FOC则以平滑高效控制见长,适用于高端精密应用。文章为工程师提供了实用的技术选型指南,并展望了未来技术融合的发展趋势。

yhn4567890的博客 1172

Developing COM Components using VC-ATL(2-6)

六、MyCom.h     代码选取// MyCom.h : Declaration of the CMyCom#ifndef __MYCOM_H_#define __MYCOM_H_#include "resource.h"       // main symbols// CMyComclass ATL_NO_VTABLE CMyCom :    

flyforlove的专栏 1033

Android Camera驱动开发工程师面试指南:技术深度与实战准备

摘要:上海移远通信招聘Android Camera驱动开发工程师,主要负责Camera传感器驱动开发维护、高通/展锐平台底层开发及技术预研。岗位要求1年以上嵌入式开发经验,精通Camera传感器驱动调试,熟悉高通平台Camera架构及Android HAL框架。具备HAL开发、算法集成或车载/支付行业经验者优先。工作内容以Driver/HAL开发为主,需具备硬件接口评估能力。该职位接受Linux/单片机背景人员转型。

郑伟强dev的专栏 281

【超详细】MIT 液态神经网络(LNNs)——深度学习新动向

输入可以是任何形式的时间序列数据,其中表示时间。例如传感器读数、金融市场数据、语音信号等。

allein_STR的博客 2611

【原创】使用vc向导简历的ATL COM简单对象好像没有IUnknown接口的实现?

  这两天看了看COM和ATL,还是有点云里雾里的感觉。对ATL如何实现COM的一个可创建对象还是不太明白,只知道一些概念。知识仅局限于能够使用VC 的向导简历一个ATL工程,增加一个ATL简单对象,然后就看到工程里呼啦啦的多了一堆文件,有IDL,有CPP等等,而且编译能顺利通过,在别的工程里也可以通过CLSID创建这个类的对象,但是看工程里的几个文件,除了在一个头文件中的END_COM_MAP(

低调 930

【数据结构】期末考试复习(考点+例题)

1.线性表定义及其存储实现:顺序表和链接表,优缺点分析(顺序存储可随 机访问,链式存储可灵活利用空间),相关操作的时间复杂度。 2.链表的插入删除操作 3.两种特殊的线性表及其应用:栈、队列 4.栈、队列上的(插入/删除)操作及其特点 5.循环队列满和空的条件 6.能够定义线性表、栈、队列的数据存储结构,能够实现相关操作的算法并 分析时间复杂度(例如插入、删除及其它应用等) 7.理解线性结构的应用( 如根据要求能灵活定义线性表结构,能根据线性表 的插入、删除操作解决实际问题) 二叉树基本概念与性质(高

Molly 的博客 9371

ATL学习笔记(2): ATL对象多线程访问临界锁的实现

1. 几个临界区类 ATL将Windows临界区封装了一下,即CComCriticalSection和CComAutoCriticalSection类。两者的实现如下(精简): class CComCriticalSection { public:     CComCriticalSection()     {  memset(&m_sec, 0, sizeof(CRITICAL_

DarkMagician_Potter的专栏 993

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

ATL学习笔记

1)        IObj01接口定义。2)        CComObjectRootEx,“实现”了所有接口的公共部分,即:“AddRef”和“Release”操作,但是这两个操作的命名是:“InternalAddRef”和“InternalRelease”。3)        CComCoClass,定义了两个静态方法:CComCreator:: CreateInstanc

681

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

用ATL建立轻量级的COM对象(四)

实现接口 现在你已经积累了一些关于ATL线程模型方面的知识,下面我们来讨论ATL如何实现IUnknown。ATL最不直观的(同时也是最强大的)一个方面就是你要实现的类事实上都是不能被直接实例化的抽象类。实现一个从通用的IUnknown派生的C++类。但是在确定对象的运行环境之前,QueryInterface,AddRef 和 Release是不会有实质性代码的。...

weixin_33774308的博客 174

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

ATL对象多线程访问

COM对象必须在套间中运行。套间分为单线程套间和多线程套间。在单线程套间中,套间保证COM对象实例仅有一个线程可以访问,而在多线程套间中, COM对象实例可同时被多个线程访问。因此,在多线程套间中执行的COM对象必须解决多线程访问的同步和冲突等线程安全相关问题。 引用计数器管理的实现——CComObjectRootEx ATL使用CComObjectRootEx类来实现对COM对象计数器的管理

newlist的专栏 817
上一篇: 影响网络应用程序性能的因素
下一篇: CWindowImpl类
windcsn
博客等级 码龄24年 50粉丝 94原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值