Windows编程之COM组件

9 篇文章 0 订阅

什么是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的时候,你要记住接口不是对象!不同的对象能够实现同一个接口,同一个对象也能够实现不同的接口。

// An interface for serialization.
class ISerializable
{
public:
    virtual void Load(PCWSTR filename) = 0;    // Load from file.
    virtual void Save(PCWSTR filename) = 0;    // Save to file.
};

// Declarations of drawable object types.

class Shape : public IDrawable
{
    ...
};

class Bitmap : public IDrawable, public ISerializable
{
    ...
};
Ok,就介绍到这里,下一篇文章将介绍COM的初始化。
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值