• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >vc/mfc > CComContainedObject是怎么回事呀?

CComContainedObject是怎么回事呀?

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-04

佚名通过本文主要向大家介绍了 CComContainedObject是怎么回事呀?等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: CComContainedObject是怎么回事呀?
描述:

我都糊涂了,
CComContainedObject implements IUnknown by delegating to the owner object's IUnknown. (The owner is either the outer object of an aggregation, or the object for which a tear-off interface is being created.) 这是什么意思呀?
CComContainedObject不是指向被聚集的对象吗?它和代理IUnknown和非代理IUnknown什么关系呀?
麻烦老大们给解释一下,别告诉我那些链接,我看了好多链接了,没看懂:(


解决方案1:

前面的 zhangcrony(前后都是路,橫豎都是一) 已经把那句话翻译了,所谓的“delegating”指CComContainedObject自己不实现IUnknown的具体细节,而通过简单的调用所有者的IUnknown实现来实现IUnknown。下面就ATL实现可聚合组件的方式来说明CComContainedObject的用处。
假设楼主自己编写的类CC实现了接口IA,但是类CC并没有实现IUnknown的三个函数(如果使用向导生成的,最基本地只派生自CComObjectRootEx和CComCoClass),它们一般是由CComObject实现的。
当外部对象的IUnknown*通过CoCreateInstance传给组件时,由于CC支持被聚合,因此类厂通过CComAggObject< CC >的形式创建了一个类CComAggObject的实例(注意,CC的实例并没有被创建,而CComAggObject是一个和CComObject一样的实现了IUnknown的那三个函数的类),此实例具有自己的引用记数且只实现IUnknown。
而CC的实例是通过CComAggObject的一个成员变量生成的(由于CC的实例是CComAggObject的成员变量而在CComAggObject实例生成时自动由CComAggObject的构造函数完成生成),此成员变量的类型是CComContainedObject,它是CC的派生类(通过如此的形式:template< class U > class CComCotainedObject : public U;),它和CComObject及CComAggObject一样,都是只实现了IUnknown的三个函数,其他什么都没做。
当CComAggObject构造时,外部对象的指针pUnkOuter通过其构造函数的参数传给CComAggObject的实例,而CComAggObject仅仅简单的将它再传递给CComContainedObject实例,而CComAggObject自己依然保持着其引用记数(因为 union { long m_dwRef; IUnknown* m_pOuterUnknown; };)。
因此通过外部对象暴露给客户的IA接口实际是指向CComContainedObject的实例,由于是被聚合的,所以对IA的AddRef等调用必须委派给pUnkOuter,所以CComContainedObject的IUnknown的三个实现都是将调用委派给外部对象,因为它是IA接口的实现者。
对于tear-off也有类似的情况,所以其也被应用在CComCachedTearOffObject中


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

相关文章

  • 2017-06-04 WEB页中嵌入一个最简单的ActiveX,但关闭浏览器时总出错,why???
  • 2017-06-05 我想写一个录音的dll,里面有录音,保存,暂停功能,不知道如何下手,请高手指点
  • 2017-06-05 使用ocx封装播放视频的DLL控件求教``
  • 2017-06-04 Atl写的控件不支持TAB等光标控制键,怎么样才能让他们支持他(没使用MFC)
  • 2017-06-05 我想了解一些关于声音识别编程方面的技术
  • 2017-06-04 Web页面中的ActiveX控件怎样知道浏览器是中文还是英文环境的呢?
  • 2017-06-05 要导出类,是不是建立的DLL必须是MFC扩展dll,其他的dll就不行吗?俺是菜鸟
  • 2017-06-05 求救:activex生成的cab包,第一次可以下载安装,但以后就没法更新了,怎么回事啊???
  • 2017-06-04 请教:ActiveX控件为什么不能更新?
  • 2017-06-05 MFC获取CWebBrowser2控件上当前选中的值

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 我在VC中調用了RealAudio但退出時出錯不知為什麼
    • createservice函数是怎么回事啊,和createfile之间是什么关系?
    • HOOKsend函数应挂接哪个dll文件???
    • 如何得到不是自己创建的进程的句柄,
    • activex菜鸟问问题
    • 用COM能完成这样的功能吗?
    • KBDTABLES这个结构的疑惑
    • 怎样让程序在后台进行不被看到
    • 如何用Delphi做一个ActiveX?
    • 请问关于在SDI的框价下嵌入串口通讯控件的问题

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有