[AE] ArcGIS Engine - 基础知识 - 组件对象模型COM

内容整理自花利忠教授的课件

组件对象模型COM

基本概念

对象(Object)
系统中用来描述客观事物的一个实体,构成系统的一个基本单位。由类实例化产生

类(Class)
描述一组有相同特性(属性)和相同行为(方法)的对象。

接口(Interface)
定义了一组方法和属性的数据结构,通过这组数据结构,可以调用组件对象的功能

命名空间(Namespace)
用来组织类,通常可以把相关联的类放在一个命名空间中,进行有效的管理

组件对象模型(Component Object Model)
COM不是接口,也不是对象,它是一种二进制级别的组件通信标准。对象间的所有通信都是通过它们的接口来进行的。

COM对象
符合COM标准的对象,COM对象是实现了很多接口的对象

多态性
同一操作用于不同的对象,可以有不同的解释,产生不同的执行接口。一个类可以有多个接口,一个接口可以由多个类实现

ArcGIS中类的多态性:几个类使用同一个Interface,但每一个类却执行不同的方法和属性

使用接口定义类

<接口名> <变量名> = new 类();

在COM中,对对象的访问时通过接口完成的,因此不能像许多可视化控件那样,可直接通过其名称来调用属性或执行其方法。

//定义一个接口变量
IDrive pGarbage;

有了这个接口对象还不行,因为接口是定义在对象上的,应该产生一个对象,而对象又是从那里来的呢?–类。于是,实例化一个类

pGarbage = new GarbageTruck();

虽然我们实例化了一个GarbageTruck类,但是我们只得到了该类的IDrive接口,只能使用IDrive接口上的方法与属性,如果要使用别的接口,需要使用这个接口变量pGarbage查询出其他接口

查询接口(QueryInterface)

COM对象有很多接口,不同的接口管理着不同类型的方法
因此可以从一个接口转到另一个接口,称为QI
这个过程是由Idispatch接口管理的

这里写图片描述

Idrive pCar = new RaceCar();
pCar.Accelerate(); //调用该接口的方法
IRace pRace = pCar as IRace; //接口查询
//或者:IRace pRace = (IRace)pCar;
pRace.PitStop();
pCar.Accelerate();

COM总结

  1. COM不是接口,也不是对象
  2. 符合COM标准的对象称为COM对象
  3. COM对象必须实现lunknown接口,它是默认实现的接口,这个接口是管理COM对象声明周期的,当COM对象不使用的时候,这个接口定义的方法负责释放内存
  4. 每个组件都有一个独一无二的标识,这就是所谓的全球唯一标识符GUID 。这个标识符就是COM组件的身份,它是一个128bits的数字,由系统自由分配
  5. 一个COM对象可以有多个接口,一个接口也完全可以被多个COM对象实现,通过实现这些接口,COM实现了面向对象的多态性(几个类可以有同样的接口,
    但是它们的实现可能是极不相同的)
  6. COM对象的接口是抽象的,接口与类不同。因为接口没有任何的实现,所以不能通过自身实例化。接口由具体的类来实现,功能用接口抽象地模拟,并且用类取真正实现
  7. COM中的接口和类通常被当做“做什么”和“怎么做”(What,How),接口定义一个对象能做什么(但自己什么都不做),类定义它怎么去做
  8. COM对象的接口是不可变的。接口永远都不会版本化。一旦定义下来并发布,接口不能够改变
  9. DLL灾难:COM是可以被重用的,COM对象的实现过程也可以被修改升级,如果两个程序使用一个COM对象,而这个COM组件升级了的话,很可以就出现某个程序无法使用新组件的情况。
    我们有时候安装了新软件后很多别的软件都无法使用,很多都是因为DLL HELL。别以为这是个小问题,这可是微软提出.NET平台的一个主要原因
CruiseYoung提供的带有详细书签的电子书籍目录 http://blog.csdn.net/fksec/article/details/7888251 该资料是《COM技术内幕——微软组件对象模型》一书的随书源代码 COM技术内幕——微软组件对象模型 基本信息 原书名: Inside COM: Microsoft's Component Object Model with Cdrom 原出版社: Microsoft Press 作者: (美)Dale Rogerson 译者: 杨秀章 丛书名: 微软版权图书 出版社:清华大学出版社 ISBN:730203320X 上架时间:2001-10-11 出版日期:1999 年3月 页码:293 版次:1-1 所属分类:计算机 > 软件与程序设计 > COM/DCOM/ATL/COM+ 内容简介    微软公司的组件对象模型(COM)作为一种重要的工具已崭露头角,它是微软迈向分布式计算的基础。不论现在还是将来,它都是定制应用程序的一种强大的方法。并且它是OLE和ActiveX 的基础。COM帮助你理解未来的程序开发技术,而这本书帮助你理解COM。在本书中你将发现:构建优美的COM组件的清晰、简单、实用的规则;COM是如何易学易用,特虽是对那些熟练掌握C++ 的人;循序渐进地介绍COM设计;以代码形式给出的大量实例。    《COM技术内幕》适合于中、高级C++程序员;COM、ActiveX和OLE程序员;对组件设计感兴趣的研究人员;以及那些当COM移植到UNIX、MVS和其他环境时想要使用到COM的程序员。 编辑推荐    微软公司的组件对象模型(COM)作为一种重要的工具已崭露头角,它是微软迈向分布式计算的基础。不论现在还是将来,它都是定制应用程序的一种强大的方法。并且它是OLE和ActiveX 的基础。COM帮助你理解未来的程序开发技术,而这本书帮助你理解COM。在本书中你将发现:构建优美的COM组件的清晰、简单、实用的规则;COM是如何易学易用,特虽是对那些熟练掌握C++ 的人;循序渐进地介绍COM设计;以代码形式给出的大量实例。 目录 封面 -17 扉页 -16 版权 -15 译者前言 -14 目录 -13 引言 -6 第1章 组件 1 1.1 使用组件的优点 2 1.1.1 应用程序的定制 2 1.1.2 组件库 3 1.1.3 分布式组件 3 1.2 对组件的需求 4 1.2.1 动态链接 4 1.2.2 信息封装 5 1.3 COM 6 1.3.1 COM组件是…… 7 1.3.2 COM不是…… 7 1.3.3 COM库 8 1.3.4 COM方法 8 1.3.5 COM超越了用户的需要 8 1.4 本章小结 9 第2章 接口 11 2.1 接口的作用 11 2.1.1 可复用应用程序架构 12 2.1.2 COM接口的其他优点 13 2.2 COM接口的实现 13 2.2.1 编码约定 14 2.2.2 一个完整的例子 15 2.2.3 非接口通信 18 2.2.4 实现细节 18 2.3 接口理论:第二部分 20 2.3.1 接口的不变性 20 2.3.2 多态 20 2.4 接口的背后 21 2.4.1 虚拟函数表 21 2.4.2 vtbl指针及实例数据 23 2.4.3 多重实例 24 2.4.4 不同的类,相同的vtbl 24 2.5 本章小结 26 第3章 QueryInterface函数 27 3.1 接口查询 28 3.1.1 关于IUnknown 28 3.1.2 IUnknown指针的获取 29 3.1.3 关于QueryInterface 29 3.1.4 QueryInterface的使用 30 3.1.5 QueryInterface的实现 31 3.1.6 关于类型转换 32 3.1.7 一个完整的例子 35 3.2 关于QueryInterface的实现规则 40 3.2.1 同一IUnknown 40 3.3.2 客户可以获取曾经得到过的接口 41 3.2.3 可以再次获取已经拥有的接口 41 3.2.4 客户可以从任何接口返回到起始接口 42 3.2.5 若能够从某接口获取某特定接口,则从任意接口都将能够获取此接口 42 3.3 QueryInterface定义了组件 43 3.3.1 接口集 44 3.4 新版本组件的处理 44 3.4.1 何时需要建立一个新版本 46 3.4.2 不同版本接口的命名 46 3.4.3 隐含
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值