1,COM初步:
Google Earth客户端是基于组件技术的,组件即COM,Google Earth COM API是Google Earth组件的公用接口。
面向对象编程思想非常注重对象之间的联系,但是程序之间的联系,则是COM所注重的,在软件行业蓬勃发展的今天,不同软件之间互相利用是一个常见的事情,因此COM在当今软件行业是一种潮流。
COM技术本身也是基于面向对象思想编程的,COM包括对象和接口两部分。COM的对象和C++中的对象概念类似,对象是类的实例,类则是经过封装的一个数据结构。接口是一组与对象相关的函数集合。这些函数通常被称为接口成员函数,函数名一般以I为前缀。
组件拥有对象,对象拥有接口,外部程序需要利用该组件的功能,就必须调用组件中对象的接口。
每个组件都拥有一个128位的对象标识符CLSID。CLSID在全球范围内是唯一的,这样可以避免不同组件质检的冲突,组件的每个接口也拥有一个128位的全局唯一标识符GUID,用于可以通过GUID获得接口的指针,进而调用接口成员函数。
先得说下GUID,它是Globally Unique Identifier的简称,中文翻译为“全局唯一标示符”,在Windows系统中也称之为Class ID,缩写为CLSID。
组件技术采用了IDL(接口描述语言)描述组件的数据结构,在组件模型中,接口首先需要定义,然后通过类来实现这些接口,IDL通过近似C/C++语言的形式描述了接口的定义,类的属性和成员函数。同时还定义了一些常用的数据结构,以及组件自定义的一些数据结构,通过VC++提供的MIDL工具,用户可以将IDL生成C/C++兼容的头文件(.h)。
组件中的所有接口都支持IUnkonwn接口,组件中的所有类都实现了这个接口,IUnknown定义了所有接口的基本功能,包括QueryInterface,AddRef,Release三个函数。通过QueryInterface函数,用户可以获得对象的其他接口,函数AddRef和Release用来控制对象的声明周期。
组件可以分为进程内组件和进程外组件两类。进程内组件运行效率高,以DLL(动态链接库)的形式出现。进程外组件的运行效率相对较低,但是进程外组件可以被远程调用(远程控制)。当外部程序与组件不在同一台机器,甚至不在同一网络,都可以调用进程外组件,进程外组件以EXE的形式出现,Google Earth属于进程外组件的范畴。
二进制是组件的最大特点,组件技术独立于任何编程语言,建立在二进制代码的基础上,用户可以使用任何语言来创建一个组件,此外,组件还具有接口不变性、继承性和多态性等特点。
2,COM库:
组件的对象和接口模型给用户提供了一种构建组件的规范,用户利用这种规范来创建自己的组件。为了协助用户更有效率的创建组件,Microsoft Windows操作平台提供了有关COM的一系列代码,这一系列代码组成COM库,以.dll文件的形式存在。
COM库实现了很多功能,用户通过调用COM库的函数来完成组件的相关操作,一般用户创建一个组件对象,进而调用组件的接口成员函数,最后释放组件对象,整个过程都要用到COM库。
用户首先调用CoInitialize()函数初始化COM库,然后在注册表中,COM库根据组件名称查找组件对象标识符CLSID,根据获得的CLSID,COM库函数CoGetClassObject()创建对象的类厂,进而由类厂完成组件对象的创建,返回对象的指针,在用户不再使用组件资源时,COM库调用CoUninitialize()函数释放资源。过程如下:
![](https://img-my.csdn.net/uploads/201309/09/1378705875_3361.jpg)
COM库除了实现组件对象调用的基本功能,还实现了如COM通信等更多的特性,此外,COM库提供了一些宏和标准接口定义,由于COM库是建立在操作系统平台之上的,所以随着操作系统的更新,COM库的功能将更强大。
3,Google Earth COM API类库:
COM即组件技术,API即应用编程接口。Google公司为用户提供了Google Earth COM API类库,其意义在于用户可以在各种外部程序中调用Google Earth的功能。Google Earth COM API是一个包括11个类的类库,这些类都实现了IDispatch接口,IDispatch接口和COM中的自动化技术相关。
MFC中对自动化技术的支持类:COleDispatchDriver类。
COleDispatchDriver类成员函数:
CreateDispatch成员函数通过组建的CLSID值来创建组件对象,并返回该对象的指针;
AttachDispatch成员函数可以把当前的COleDispatchDriver类的对象和其他自动化对象联系起来;
DetachDispatch函数和AttachDispatch功能相反;
ReleaseDispatch函数用来释放所创建的对象。
用户通过COleDispatchDriver类的函数创建Google Earth的对象,进而可以使用Google Earth COM API类库。该类库中的11个类中,IApplicationGE类最重要,类库中其他类的使用,都会涉及IApplicationGE类中的属性和函数。
COM API类库介绍:
IApplicationGE 入口类,通过该类,用户进一步调用其他类;
ICameraInfoGE 相机类,通过该类,用户可以调整观看当前视图的方式;
IFeatureGE 要素类,通过该类,用户可以控制要素的属性;
IFeatureCollectionGE 要素集合类,通过该类,用户进一步获取要素;
IPointOnTerrainGEt 地理坐标点类,通过该类,用户获取屏幕点的地理坐标;
IVewExtentsGE 视口类,通过该类,用户可以控制当前视口;
ISearchControlerGE Search面板类,通过该类,用户可以完成相应的搜索功能;
ITourControlerGE Tour面板类,通过该类,用户可以动态播放当前的要素;
IAnimationControllerGE Animation面板类,通过该类,用户可以动态播放当前的时间要素;
ITimeGE 时间类,通过该类,用户可以获取和设置要素的时间属性;
ITimeIntervalGE 时间间隔类,通过该类,用户可以获取要素的时间间隔属性。
组件技术采用了IDL(接口描述语言)描述组件的数据结构,在组件模型中,接口首先需要定义,然后通过类来实现这些接口,IDL通过近似C/C++语言的形式描述了接口的定义,类的属性和成员函数。同时还定义了一些常用的数据结构,以及组件自定义的一些数据结构,通过VC++提供的MIDL工具,用户可以将IDL生成C/C++兼容的头文件(.h)。
组件中的所有接口都支持IUnkonwn接口,组件中的所有类都实现了这个接口,IUnknown定义了所有接口的基本功能,包括QueryInterface,AddRef,Release三个函数。通过QueryInterface函数,用户可以获得对象的其他接口,函数AddRef和Release用来控制对象的声明周期。
组件可以分为进程内组件和进程外组件两类。进程内组件运行效率高,以DLL(动态链接库)的形式出现。进程外组件的运行效率相对较低,但是进程外组件可以被远程调用(远程控制)。当外部程序与组件不在同一台机器,甚至不在同一网络,都可以调用进程外组件,进程外组件以EXE的形式出现,Google Earth属于进程外组件的范畴。
二进制是组件的最大特点,组件技术独立于任何编程语言,建立在二进制代码的基础上,用户可以使用任何语言来创建一个组件,此外,组件还具有接口不变性、继承性和多态性等特点。
2,COM库:
组件的对象和接口模型给用户提供了一种构建组件的规范,用户利用这种规范来创建自己的组件。为了协助用户更有效率的创建组件,Microsoft Windows操作平台提供了有关COM的一系列代码,这一系列代码组成COM库,以.dll文件的形式存在。
COM库实现了很多功能,用户通过调用COM库的函数来完成组件的相关操作,一般用户创建一个组件对象,进而调用组件的接口成员函数,最后释放组件对象,整个过程都要用到COM库。
用户首先调用CoInitialize()函数初始化COM库,然后在注册表中,COM库根据组件名称查找组件对象标识符CLSID,根据获得的CLSID,COM库函数CoGetClassObject()创建对象的类厂,进而由类厂完成组件对象的创建,返回对象的指针,在用户不再使用组件资源时,COM库调用CoUninitialize()函数释放资源。过程如下:
![](https://img-my.csdn.net/uploads/201309/09/1378705875_3361.jpg)
COM库除了实现组件对象调用的基本功能,还实现了如COM通信等更多的特性,此外,COM库提供了一些宏和标准接口定义,由于COM库是建立在操作系统平台之上的,所以随着操作系统的更新,COM库的功能将更强大。
3,Google Earth COM API类库:
COM即组件技术,API即应用编程接口。Google公司为用户提供了Google Earth COM API类库,其意义在于用户可以在各种外部程序中调用Google Earth的功能。Google Earth COM API是一个包括11个类的类库,这些类都实现了IDispatch接口,IDispatch接口和COM中的自动化技术相关。
MFC中对自动化技术的支持类:COleDispatchDriver类。
COleDispatchDriver类成员函数:
CreateDispatch成员函数通过组建的CLSID值来创建组件对象,并返回该对象的指针;
AttachDispatch成员函数可以把当前的COleDispatchDriver类的对象和其他自动化对象联系起来;
DetachDispatch函数和AttachDispatch功能相反;
ReleaseDispatch函数用来释放所创建的对象。
用户通过COleDispatchDriver类的函数创建Google Earth的对象,进而可以使用Google Earth COM API类库。该类库中的11个类中,IApplicationGE类最重要,类库中其他类的使用,都会涉及IApplicationGE类中的属性和函数。
COM API类库介绍:
IApplicationGE 入口类,通过该类,用户进一步调用其他类;
ICameraInfoGE 相机类,通过该类,用户可以调整观看当前视图的方式;
IFeatureGE 要素类,通过该类,用户可以控制要素的属性;
IFeatureCollectionGE 要素集合类,通过该类,用户进一步获取要素;
IPointOnTerrainGEt 地理坐标点类,通过该类,用户获取屏幕点的地理坐标;
IVewExtentsGE 视口类,通过该类,用户可以控制当前视口;
ISearchControlerGE Search面板类,通过该类,用户可以完成相应的搜索功能;
ITourControlerGE Tour面板类,通过该类,用户可以动态播放当前的要素;
IAnimationControllerGE Animation面板类,通过该类,用户可以动态播放当前的时间要素;
ITimeGE 时间类,通过该类,用户可以获取和设置要素的时间属性;
ITimeIntervalGE 时间间隔类,通过该类,用户可以获取要素的时间间隔属性。