com接口是干嘛用的(什么是COM接口)

如果你了解 C# 或者 Java 语言,接口就会是一个非常熟悉的概念。接口是一个对象上一组操作的集合,不涉及任何实现的细节,接口标志着方法和实现的分离。计算机中这种现象叫做解耦(decoupled)。

com接口是干嘛用的(什么是COM接口)

在 C++ 中,最接近于接口概念的就是纯虚类(pure virtual class)。纯虚类就是一个仅仅包含纯虚函数的类,除了纯虚函数不含有任何其它的成员变量或者函数,如:

// The following is not actual COM.// Pseudo-C++:interfaceIDrawable{ voidDraw(); };

这个例子来源于一些用来绘图的库中的对象。IDrawable 接口定义了绘图中常用的操作,任何支持绘图功能的对象都必须支持该接口。(惯例,接口名称的首字母为 “I”),IDrawable 接口目前只定义了一个操作:Draw。

所有的接口都是抽象的,代码中不能直接创建一个 IDrawable 接口的实例对象( C++ 语法规则不支持纯虚函数对象的创建)。例如,下面的代码是无法编译通过的:

IDrawabledraw; draw.Draw();

相反的,图形库都会提供一些对象来实现 IDrawable 所定义的接口。例如,可以实现一个叫做 Shape 的类或者一个叫做 Bitmap 的类,C++ 中使用继承实现这种关系:

classShape:publicIDrawable { public: virtualvoidDraw(); // Override Draw and provide implementation.}; classBitmap:publicIDrawable { public: virtualvoidDraw(); // Override Draw and provide implementation.};

Shape 和 Bitmap 类定义了两种不同的对象,二者都支持绘图功能。每个类都继承自 IDrawable 接口,而对于 Draw 方法绘制的具体实现细节可以各自不同。

如果程序中使用二者进行绘制,可以使用 IDrawable 的指针对象来操纵它们,而不是直接使用 Shape 和 Bitmap 对象的指针。

IDrawable*pDrawable = CreateTriangleShape();if(pDrawable){pDrawable->Draw();}

这有一个循环遍历 IDrawable 接口指针的列子,在这个数组中,每项成员可能是 Shape 对象,也可能是 Bitmap 对象,更可能是一些支持 IDrawable 接口的其他对象,代码中无需这些不同类型的实现细节,只需要调用它们都支持的共有接口 IDrawable 就可以绘制我们想要的图像。

voidDrawSomeShapes(IDrawable **drawableArray, size_tcount){ for(size_ti = 0; i < count; i++) { drawableArray[i]->Draw(); } }

COM 组件 的一个关键点就是调用者永远不需要知道派生类的具体实现细节。换句话说,在你的代码中一般不会声明 Shape 或者 Bitmap 类型的变量。所有的操作都是通过它们共有的接口 IDrawable 来完成。用这种方式,COM 组件可以做到接口和实现的完全分离。

你可以随时改变 Shape 或者 Bitmap 对象的绘制方法,例如修复一个 bug,或者增加一些新的能力,对于调用者来说是透明的,调用者的代码是无需任何修改的。

在 C++ 中,接口使用类或者结构体来实现。

文章中的代码案例只是用来演示说明问题,真正的 COM 接口 定义显然不会这样简单。一般一个 COM 接口的定义使用一种叫做 Interface Definition Language(IDL)—— 接口定义语言的东西。这个 IDL 文件将描述具体的接口行为,然后用 IDL 文件编译器处理,生成一组 C++ 头文件。

classIDrawable{ public: virtual void Draw() = 0; };

当你在使用 COM 组件的时候,一定要记住接口不是对象。它们是一组必须实现的方法集合。一些对象可以实现一样的接口,例如代码中的 Shape 对象和 Bitmap 对象。另外一个对象可以实现几个接口,例如,一个图形库可能定义一个名字叫做 ISerializable 的接口对象,它用来保存和加载图形对象数据(图形的序列化)。现在考虑下面的代码:

// An interface for serialization.classISerializable{public: virtualvoidLoad(PCWSTR filename)= 0; // Load from file.virtualvoidSave(PCWSTR filename)= 0; // Save to file.}; // Declarations of drawable object types.classShape:publicIDrawable { … }; classBitmap:publicIDrawable, publicISerializable { … };

在例子中,Bitmap 类实现了 ISerializable 接口,程序可以使用该接口保存和加载 Bitmap 对象。然而 Shape 类没有实现这个接口,所以它不支持这个功能。下面是例子中的继承关系:

com接口是干嘛用的(什么是COM接口)

上面的文字只是简单的介绍 COM 组件 的一些概念,目前我们还没有看见过一个真正的 COM 组件,接下来的内容从每个 COM 应用都必须做的一件事开始 —— COM 库初始化。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

(0)
上一篇 2024年3月29日 下午4:46
下一篇 2024年3月29日 下午4:47

相关推荐

  • 白水晶作用与功效(白水晶的寓意及功效)

    白水晶是水晶家族成员之一,其呈透明和不透明状。因为色泽纯洁,深受人们喜爱,那么大家知道白水晶的功效与作用吗? 自然光经水晶折射后的光会对人产生一定镇静作用,有医生用水晶催眠治病的事例。白水晶无色晶亮纯净,人一定时间注视后有排除杂念和心绪稳定的作用。自古以来很多人都以为白水晶有灵性,它区别于一般的透明和纯净。 一、白水晶的功效与作用之生理健康 1、白水晶主健康…

    2023年3月6日
    240
  • 文档空白页怎么删除(怎样删除Word空白页)

    我们在编辑word文档的时候,可能会经常看到word中有一些空白页,不过不同原因引起的空白页删除方法也是不一样的,那么Word怎么删除空白页呢?针对这个问题,本文就给大家讲述一下Word文档删除空白页4种方法供大家参考吧,大家可以跟着一起来看看吧。 方法一:分页符导致的空白页删除方法 一篇Word文档有一页空白,但是我们使用删除键却无法删除,这是由于有分页符…

    2024年1月30日
    40
  • 发色2024年最火发色显白(超级显白的8种发色推荐)

    近看来染发成为一种时尚,无论年轻男女,还是中年阿姨都会时常染发,既为了减龄也为了漂亮。像是年轻人,会将头发染成年度流行色,例如亚麻色、奶奶灰、烟灰色、藕粉色、蓝色等,而年龄稍大些的会将头发染成酒红色、深棕色、栗棕色等。但你有没有发现一点,一个好看的颜色也不是谁染都好看,在一定程度上,发色对肤色会有很大的影响。有些颜色染上会超级显白,有些颜色染在某人头上却会显…

    2024年1月12日
    140
  • 贵族领主类西方玄幻小说(五本完本西方玄幻领主文)

    相信多数人的西幻之路是从指环王开始的,各种各样的种族竞争,魔法与骑士的碰撞,势力间勾心斗角…… 今天的推文,冷饮为大家带来五本西幻领主文,量大管饱,求点赞,关注,收藏支持一波 《恶魔法则》跳舞著 故事梗概: 非常古早的西方玄幻文了,在穿越者前辈阿拉贡建立的王朝里,杜维穿越成了罗林家族的长子。 他逐步邂逅了八级魔法师薇薇安和乔乔(双胞胎姐妹,性格反差极大),美…

    2023年1月17日
    2580
  • 索尼笔记本怎么进入bios(sony按什么键进入bios)

    BIOS是英文”Basic Input Output System”的缩略语,直译过来后中文名称就是”基本输入输出系统”。其实,它是一组固化到计算机内主板上一个ROM芯片上的程序,它保存着计算机最重要的基本输入输出的程序、系统设置信息、开机后自检程序和系统自启动程序。 BIOS是连接软件与硬件的一座“桥梁”,是…

    2022年12月14日
    450
  • 冷色调和暖色调的区别图片(暖色调冷色调怎么区分)

    冷色 蓝色是三原色之一,它是最冷的颜色,让人联想到海洋,冰雪,天空,宇宙等,所以它有纯净,空灵,幻想,抑郁等含义。 绿色是三原色之一,它是最有生命力的颜色,让人联想到了春天的植物,有希望青春,繁荣,生机,清新等含义。 紫色让人联想到矿物黑夜,给人高贵神秘诡异的感觉. 暖色 红色是三原色之一,它具有活力的颜色,让人联想到血与红有力量,活跃进攻,爆发等含义,因为…

    2023年2月8日
    310
  • 日语加油怎么说谐音(日语常用句中文谐音有哪些)

    日语日常用语50句中文谐音 1、好厉害(自由咿) 2、谢谢 (啊丽嘎多) 3、怎么du啦 (都西大) 4、偷一下zhi懒 (傻不你呦) 5、这可不行 (所里挖那里蚂蚁) 6、为什么? (男的诶) 7、那是什么 (男的所里挖) 8、什么意思? (满家所里挖) 9、我明白啦 (挖卡打哇) 10、这是 (库里挖) 11、加油 (刚巴嘚) 12、搞定啦! (亚当!)…

    2023年1月28日
    330
  • 羽绒服怎么看保不保暖

    羽绒服是生活中比较常见的一种冬装,比较轻便,具有很不错的保暖效果,深受人们喜欢。下面一起来了解一下羽绒服怎么看保不保暖。羽绒服怎么看保不保暖1、看蓬松度:蓬松的羽绒服可以相互交叉储存空气,这样能锁住热

    2022年9月30日
    1090
  • 家里三种花草不可以养(家里三种不能养的花)

    家里三种不能养的花在家里面养一些花花草草,不仅给整个室内带来了生机,而且还可以清新空气。不过大家要注意在家里面养植物的时候,有些植物是不能够胡乱养的。毕竟这些植物可能会给我们的身体带来严重的影响。因为

    2022年8月31日
    410
  • 骶髂关节疼痛位置图(骶髂关节疼痛的原因及缓解技巧)

    有没有过晚上睡觉时或是体力活动后骨盆附近疼痛?甚至是上下楼梯或是下蹲都会引发剧烈的疼痛?这有可能是骶髂关节障碍。 和骶髂关节疼痛的有关记载可以追溯到公元前460~前377年。骶髂关节是连接脊椎与骨盆、上半身与下半身、中轴骨与四肢骨髂,以及身体两侧的中心。这个深层、复杂的大关节在走路、跨步、坐、弯曲和其他日常活动中发挥关键作用。骶髂功能障碍是引起骶髂关节疼痛的…

    2024年4月4日
    00

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信