ao基础教程(doc11)-管理培训(编辑修改稿)内容摘要:
,是因为这些接口并不由对象实现,而是由客户程序实现。 类型库 (Type Library) 一个类型库被作为一个接口定义语言( IDL)文件的二进制版本,是一系列 COM 对象和接口的集合,并被编译进一个形如 OLB、 DLL 或 OCX 这样的二进制文件中。 为了支持一个不依赖于 开发语言工具的组件集,关于 ArcObjects 库所有相关的数据都被打包进 的类型库,它就包括了一个所有 coclasses 的二进制描述,接口,方法和服务器类型。 Microsoft 提供了多个 COM 接口用于类型库,这两个接口是 ITypeInfo 和 ItypeLib。 利用标准的 COM 接口,不同的开发工具和编译器能够获得由一个特定库支持的 coclasses 和接口有关信息。 4. 双向COM支持 是指有可能既在一种语言中使用 COM 对象,又可使用这种语言编写 COM 对象; 5. 进程内 COM、本地 COM 和远程 COM COM 是一个客户/服务器体系,服务器(或对象)提供功能,并且客户程序使用这些功能。 如果 COM 程序和客户程序在同一进程地址空间内,则称之为进程内 COM,这通常是以 DLL 形式实现,而本地 COM是指同一计算机上不同进程中的 EXE,远程 COM 则是指不同计算机中的 DLL 或 EXE。 有不耐烦或现在回过头看这章而且存有疑问的人吗。 讲了那么多 COM AND COM,那么我在 DEPHI 或 VB 下用 AO 写一个DLL,这个 DLL 到底算什么呢。 好,就让我来用 C/S 的概念来做一个解释。 如果你是自己写的应用程序框架,那么 你的应用程序就是客户端,而调用的 DLL 其实就是服务器了;如果你在 ArcMap 中,那么 ArcMap应用程序其实就充当了客户端的角色发出请求,这个请求通过 COM 机制传递给 COM 服务器 —那个你写的DLL 来完成相应的功能,而这个服务器外部和内部就是由 ESRI AO 的接口及类来完成的。 第三章 AO 对象的使用 在第二章中我们谈到了许多关于 COM 的概念,象类,对象,接口,方法等,那么一个实际的 AO 开发中是如何体现这些 COM 概念的呢 既然 AO 是基于 COM 的。 在本节中,我将使用 VB 代码来说明如何使用AO 的对象,并对 如何阅读 OMD( Object Model Diagram)进行介绍。 3. 1 AO 对象的使用 让我们直接用 AO 相关的代码来开始这段旅程吧,如果你觉得的是的话。 :) Dim pMap as IMap Set pMap = New Map =”地图名称为 Tour” „„„„„„„„ . „„„„„„„„ . //ERROR 如何运行这段代码是下一章的内容,先看看为什么代码会这么写吧,里面奥妙不少。 Dim pMap as Imap 我们知 道在 COM 中对对象的访问是通过接口来完成,因此不能象许多可视化控件那样,可以直接通过其名称来调用属性或执行其方法。 那么这句其实就是定义了一个接口变量(题外注释:其实准确地讲应该是一个指向接口的指针变量才对,好在 VB 把这一切都给演示了)。 有了这个接口变量还不行,因为接口是定义在对象上的,那么下来的步骤应该是产生一个对象,而对象又是从那里来的呢 类。 于是就有了这样的代码 Set pMap = New Map。 在这句中不单纯只是实例化出一个 Map 对象,并且将上句的 pMap 接口变量做为了该对象的缺省接口。 OK,现在我们就可以通过这个接口来对地图名进行修改,或者调用 ClearLayer 方法来删除掉该地图中的所有图层了。 再看看增加最后一句的执行情况 —会出错,至于为什么,原因很简单,不同的接口中的方法或属性只能通过其接口来访问,而 Clear 方法属于 Map 类的另外一个接口 IactiveView 所有。 可以通过查询接口( Query Interface)来 ‟切换 „到 IactiveView 上。 代码如下 Dim mView as IactiveView set mview=pmap 3. 2 OMD 的作用 OMD(对象模型图)是基于 OMT( Object Modeling Technique)的表示方法,先来看看 OMD 能帮我们做些什么。 1. 该类支持哪些接口; 2. 完成任务需要哪些对象; 3. 如何使用该类的对象; 4. 是否可以直接实例化类; 5. 接口有哪些方法和属性; 6. 是否有其它类也支持该接口; 7. 对象间的关系 3. 3 OMD 符号解释 在 OMD 中有三类 class,分别是抽象类( AbstractClass)、组件类( CoClass)和普通类( Class)。 抽象类的主要目的是为它的子类定义公共 接口,一个抽象类将把它的部分或全部实现延迟到子类中,因此,一个抽象类不能被实例化。 一个组件类对象可以被直接创建,普通类对象虽然不能直接创建,但它可以可以作为其它类的一个属性或者从其它类的实例化来创建。 AO 中的 Dataset 或 Geometry classes 是抽象类的示例,一个 Geometry 类型对象不能被创建,但是一个 Polyline 可以被创建。 这个 Polyline 对象实际上在类的基础上实现了 Geometry 中定义的接口,因此在基类对象中被定义的接口可以从 coclass 来访问。 在 OMD 中的关系类型主要有类 型继承( Type inheritance)、创建( Instantiation)、组成( Composition)以及关联( Associations)等。 类型继承我们在 COM 一章过提到过,实际上就是继承完全继承了超类的接口,这点可以利用 AO 对象浏览器工具清楚的看到,而组成关系指的是对象间的主次关系,也就是说主体的生命存在与否决定着次体的存在与否。 3. 4 AO 的组织划分 整个 AO 的 OMD 看起。ao基础教程(doc11)-管理培训(编辑修改稿)
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。
用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。