中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > 综合其它
CComObjectRootEx类
作者:未知 时间:2005-07-27 23:32 出处:CSDN 责编:chinaitpower
              摘要:CComObjectRootEx类

该类处理聚合和非聚合对象的对象引用记数管理。对于非聚合对象它拥有对象的引用记数
对于聚合对象它拥有一个指向外部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


关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有