学海网 文档下载 文档下载导航
设为首页 | 加入收藏
搜索 请输入内容:  
 导航当前位置: 文档下载 > 所有分类 > Windows编程之COM组件

Windows编程之COM组件

Windows编程之COM组件

什么是COM接⼝?

COM即Component Object Model,到底是⽤来⼲啥的呢?如果你了解Java或者C#,你应该会很了解interface。在C++中,最接近接⼝概念的应该是虚类了,所谓虚类,就是只包含虚函数的类。下⾯是接⼝的例⼦

// The following is not actual COM.

// Pseudo-C++:

interface IDrawable

{

void Draw();

};

IDrawable这个接⼝定义了任何可绘制的对象必须⽀持的⽅法,(顺便说⼀句,接⼝的名字必须以I开头)。在这个接⼝中,IDrawable接⼝定义了⼀个最简单的操作:Draw。所有的接⼝都是抽象的,故⽽下⾯的代码是不能够编译的。

IDrawable draw;

draw.Draw();

在C++中,虚类的实现主要依靠多态:

class Shape : public IDrawable

{

public:

virtual void Draw(); // Override Draw and provide implementation.

};

class Bitmap : public IDrawable

{

public:

virtual void Draw(); // Override Draw and provide implementation.

};

Shape Bitmap类定义了两个完全不同的可绘制对象。每⼀个类继承IDrawable类并且重写了类⾥⾯的虚函数。任何使⽤IDrawable的程序必须通过IDrawable指针来处理Shape和Bitmap,⽽不是直接定义Shape 或Bitmap的指针。

IDrawable *pDrawable = CreateTriangleShape();

if(pDrawable)

{

pDrawable->Draw();

}

下⾯是⼀个IDrawablez指针数组的循环。数组可能没有明确的分类(shapes,bitmaps或者其它),但他们都继承IDrawable类。

void DrawSomeShapes(IDrawable **drawableArray, size_t count)

{

for (size_t i = 0; i < count; i++)

{

drawableArray[i]->Draw();

}

}

COM最重要的⼀点就是调⽤代码从来看不到派⽣类。换句话说,你不能够在你的code中声明Shape或者Bitmap类型。所有关于Shape or Bitmap 的操作都是通过使⽤IDrawable指针实现的。通过这种⽅式,COM能够保持接⼝和实现的分隔,从⽽实现多态。需要注意的是,上⾯的代码并不是真正的COM代码,它们只是为了解释说明COM。

当你使⽤COM的时候,你要记住接⼝不是对象!不同的对象能够实现同⼀个接⼝,同⼀个对象也能够实现不同的接⼝。

第1页

TOP相关主题

我要评论

相关文档

    站点地图 | 文档上传 | 侵权投诉 | 手机版
    新浪认证  诚信网站  绿色网站  可信网站   非经营性网站备案
    本站所有资源均来自互联网,本站只负责收集和整理,均不承担任何法律责任,如有侵权等其它行为请联系我们.
    文档下载 Copyright 2013 doc.xuehai.net All Rights Reserved.  email
    返回顶部