• 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 > 聚合的实现问题,代理IUnknown和非代理是什么意思

聚合的实现问题,代理IUnknown和非代理是什么意思

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

佚名通过本文主要向大家介绍了 聚合的实现问题,代理IUnknown和非代理是什么意思等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 聚合的实现问题,代理IUnknown和非代理是什么意思
描述:

上面的问题,哪位能帮忙给解答一下,看了书还是不明白。


解决方案1:

非委托IUnknown实际上并不是一般意义上的IUnknown接口,它只是顶替聚合时IUnknown的真实实现,你完全可以使用其他的技巧顶替它(比如一个类或一个函数指针数组等等),IUnknown用来制定满足COM规则的接口查询和生命周期管理的行为,具体的实现与接口本身无关,非委托IUnknown就是提供这个实现的,所以说它不是一个严格意义上的接口,所以说没必要非用接口的形势实现它,这样使用只是一个技巧。

解决方案2:

COM都被微软抛弃了,还研究啊?
假设对象A实现了IA接口,对象B实现了IB接口,A被B聚合。
如果我们得到了B的IB指针,根据IB::QueryInterface查询IA是很容易的,因为B只需要返回它的内部对象A的指针就可以了;
反过来如果我们得到了A的IA指针,根据COM原则,我们应该可以从A的IA::QueryInterface查询得到IB接口。但实际情况是A根本不知道它的外部对象是什么(A有可能是别人写好的组件),这就需要有一种机制,使得A在被聚合的时候,可以调用它的外部对象的IUnknown。
这种机制就是代理IUnknown。
代理IUnknown是对象A暴露在外边的IUnknown,它什么操作都不实现,只是转发客户的请求。当对象A没有被聚合时,它把请求转发给非代理IUnknown,由非代理IUnknown实现具体对象A的QueryInterface, AddRef, Release等操作;当对象A被外部对象聚合时,它把客户请求转发给外部对象的IUnknown指针,外部对象通过调用对象A的非代理IUnknown来控制对象A。
顺便说一句,外部对象的IUnknown指针是在CoCreateInstance()中传递进来的。

解决方案3:

我的理解:
COM原则:“若能够从某接口获取特定接口,则从任意接口都将能够获取此接口”
代理IUnknown接口就是一个纯粹的、一般意义上的IUnknown接口,它在这个对象被另一个COM对象聚合时通过这个接口将对外部组件接口的调用请求转发给外部组件。
其中的非代理未知接口将按通常的方式实现内部组件的IUnknown接口功能(强调功能),负责内部组件引用计数、查询内部接口或内部组件方法调用等等。


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

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

  • 聚合的实现问题,代理IUnknown和非代理是什么意思

相关文章

  • 2017-06-04 为什么COM的书这么少了?
  • 2017-06-05 在线程函数中,可以向FrowView类发送消息吗
  • 2017-06-05 API函数不能连续多次调用问题
  • 2017-06-04 为什么注册不上呢?
  • 2017-06-04 CShockwaveFlash与IE交互
  • 2017-06-04 誰能提供COM書籍的電子檔下載地址?
  • 2017-06-04 MFC线程疑问
  • 2017-06-05 一个看是简单的循环问题,希望高手参与告诉我答案。
  • 2017-06-05 纯C++实现COM用的是扩展DLL还是正规DLL???
  • 2017-06-04 CBuilder区无人回答,来这里求救。制作ActiveX时的属性,如何保存IDE设计时的值?

文章分类

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

最近更新的内容

    • _com_error可否转化成CException?在线等候,重赏:)
    • 再请教一下关于DLL中导出类的问题?
    • MFC操作word生成柱状图、饼形图
    • 在com组件里面开几个线程!!
    • 试问,使用NSIS在64位系统下,如何调用dll??
    • COM接口调用问题
    • RICHEDIT播放GIF控件,急需大家帮忙解决?
    • 如何给用ATL写的对话框加入DDX?
    • 我想监控一个程序的所有消息包括弹出一个窗口怎么做?
    • 文件系统写磁盘如何分配扇区?

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

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