• 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 > 关于初学com的几点迷惑,请老大们指教

关于初学com的几点迷惑,请老大们指教

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

佚名通过本文主要向大家介绍了迷惑怪味豆,迷惑龙,迷惑,迷惑不解的意思,迷惑不解等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 关于初学com的几点迷惑,请老大们指教
描述:

1 关于句柄类
  句柄类也完全可以实现:接口和实现的分离,Don Box在书中也讲到这一点,但是vc开发com组件好像没有采用句柄类的,像MFC采用的嵌套类技术,ATL采用的抽象基类的多继承,模版技术,为什么句柄类没有得到应用???谁能给解释解释
2关于嵌套类
com的本质是一个接口与实现分离的C++类,如何实现接口和实现的分离是一个问题,通过用纯虚类做为基类来实现接口和实现的分离,我可以理解,但是嵌套类怎么能实现接口和实现的分离,那位老大能给解释一下??
 纯虚类可以作为接口,是因为纯虚类不包含数据成员,只是通过虚函数表可以提供接口函数的入口地址
但是嵌套类就不同了,它有自己的数据成员,比如CCmdTarget类,ccmdtarget是如何来体现二进制的接口协议的呢?
欢迎高手参加讨论,如果你们能将嵌套类实现com二进制协议接口讲述的很清楚的话,我开贴另谢


解决方案1:

楼上说付出了什么严重的代价

解决方案2:

to:phoenixsharp(小星星)
嘿嘿~~
COM真的有这么简单就好了。
个人觉得COM为了跨越语言界限付出了很重的代价,加上跨进程、线程间对象
引用让人觉得学习COM只有“难”一个字。

解决方案3:

[引用]:
(1) COM组件实际上是一个C++类,而接口都是纯虚类。组件从接口派生而来。我们可以简单的用纯粹的C++的语法形式来描述COM是个什么东西: 
  class IObject
  {
  public:
    virtual Function1(...) = 0;
    virtual Function2(...) = 0;
    ....
  };
  class MyObject : public IObject
  {
  public:
    virtual Function1(...){...}
    virtual Function2(...){...}
....
  }; 
  看清楚了吗?IObject就是我们常说的接口,MyObject就是所谓的COM组件。切记切记接口都是纯虚类,它所包含的函数都是纯虚函数,而且它没有成员变量。而COM组件就是从这些纯虚类继承下来的派生类,它实现了这些虚函数,仅此而已。从上面也可以看出,COM组件是以 C++为基础的,特别重要的是虚函数和多态性的概念,COM中所有函数都是虚函数,都必须通过虚函数表VTable来调用,这一点是无比重要的,必需时刻牢记在心。

解决方案4:

<<COM本质论>>的确不错,小潘译的,昨天DOWN回去看了开头的章节...感觉就像一个节目的口号"原理是什么,这夜我们说清楚!!".
呵呵...正在学习..希望大家多交流一下心得.

解决方案5:

ccmdtarget当然不是抽象基类,确切的说,它是接口实现类的外套类,同时也是一个接口实现类。
从接口继承的类是接口实现类,再从这个类继承的类也是实现类,同样嵌套了该类的类也是实现类。
class A:public IXXX {...}
class B:public A {...}
class C {
    ...
    class C1 : public IXXX {...}
    ...
}
以上A、B、C都是接口实现类(COM对象),因为它们都有一个共同的特点,就是其类实例都拥有一个特殊的成员变量-IXXX的vptr和都拥有一个虚函数表。
C就是使用嵌套类的情况,ccmdtarget就是这种类。

解决方案6:

顶!!!!!!!!!!!!!!

解决方案7:

有哪位高人来解释一下V表..实在搞不懂..

解决方案8:

接口都是纯虚类,它所包含的函数都是纯虚函数,而且它没有成员变量。而COM组件就是从这些纯虚类继承下来的派生类,它实现了这些虚函数,仅此而已..[引用]
俺也是才学习COM.大致和楼上的理解差不多...
观注.......

解决方案9:

1.句柄类确实可以基本做到把对象的行为和实现相分离(还不够),但是远谈不上做到了COM的实际要求,首先句柄类本身就存在实现,它要负责转发接口函数的请求给实际的实现类,这就要求它要了解实现类的细节,所以说,句柄类只是对客户隐藏了对象的实现,但它较接口来讲又与对象的实现类过于耦合。另外,使用句柄类在每一次方法调用至少要多执行一次方法调用(即本身的调用转发函数),再者,应用起来也太麻烦,需要为每个接口函数写转发实现。
2.嵌套类的方法是指把多个实现单一或一组简单接口的实现类包装成一个类,由于这个类内部的类实现了接口,所以它本身并不从接口继承,也不存在接口函数实现。当然基本的IUnkown方法还是实现了,但仅仅是起到向内部实际的接口实现类做转发,由于各个内部实现类各自实现自己的接口方法,所以不存在接口方法名冲突的问题(多继承时会出现同名方法实现相互覆盖的问题),这在对已有复杂类库进行COM化时大有好处,所以MFC的COM实现使用了这种方法。具体原理很简单,《COM本质论》里有介绍,不多说了。

解决方案10:

我也刚学,瞎说点自己的看法
com和mfc写法相比就是多了个壳子,这个壳子(应该就是你说的包装类)支持其他语言的调用,实现2进制级的代码重用
问题1太深刻了,俺不知道,第2个我觉得它的变量和控件的属性差不多,主要是自己用,别人想要用通过函数接口来访问,我也想听权威的解释,只是用用感觉很不爽,总想弄明白这些问题

解决方案11:

你学多少了,你是用mfc写的,还是直接用atl写的

解决方案12:

我也很困惑


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

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

  • [迷惑]:线程中发送消息的问题!
  • 迷惑,在线等待
  • 关于初学com的几点迷惑,请老大们指教

相关文章

  • 2017-06-04 我写了个OCX给上层使用,我想在知道上层运行时OCX被设为了多大
  • 2017-06-05 疑惑。dll中可以一直保存一个变量直到程序结束吗?
  • 2017-06-05 急,如何实现这样的进程通讯,谢谢
  • 2017-06-04 有谁知道这个接口该怎么调用,在线等待。(100分)
  • 2017-06-05 dll中的函数有和调用者间的内存访问,调用会出错??
  • 2017-06-04 用WebBrowser控件制作的“浏览器”,用DOM操作网页时,能否控制其GET或者POST请求时不接收图片格式的文件?
  • 2017-06-05 请各位前辈指点:为什么我在A程序中往B程序里添加控件会出错?
  • 2017-06-04 automation服务器如何添加第二个dispinterface接口?
  • 2017-06-04 怎麼得到操作系統的類型啊﹖
  • 2017-06-05 SAPI在中文操作系统下,加载LoadCmdFromFile413的英文语法文件,设置方法?

文章分类

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

最近更新的内容

    • MFC的双缓冲绘图
    • 新人,求助,如何导出ActiveX控件中的辅助类?象MapX那样的有多个导出类的ActiveX控件
    • MFC对话框插入ActiveX控件的问题
    • com组件如何带参数创建接口,就像IDirect3D9::CreateDevice
    • ActiveX控件和Windows标准控件有什么相同和不同
    • 请问VC2005下ChartFX有那位高手用过么?请问标注怎么写啊
    • 如何调用并显示com控件Open属性下的数据?
    • 双击ocx或dll格式的控件的时候,系统在做什么?
    • [source,default]interfaceICallBack; //这里的source代表什么意思?
    • -高手-高手-紧急-紧急俄罗斯对战多线程同步的问题

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

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