昨天在qq群里看到有人在问 com 与net的有什么区别 老大回答的我没有听明白
很晕 找了一下在AE方向开发的区别
COM
COM组件既可以运行在客户端,也可以运行在服务器端,提供服务端或客户端的功能,在一个基于COM实现的客户端也很容易布暑在服务器端,COM组件是以WIN32动态链接库(DLL)或可执行文件(EXE)形式发布的可执行代码组成、它遵循COM规范编写的一些小的二进制可执行文件;COM组件可以给应用程序、操作系统以及其他组件提供服务,并且其定义的COM组件可以在运行时刻同其他组件连接起来构成某个应用程序、COM组件可以动态的插入或卸出应用、COM组件必须是:动态链接的;隐藏(封装)其内部实现细节;将其实现的语言隐藏;必须以二进制的形式发布;必须可以在不妨碍已有用户的情况下被升级;可以透明的在网络上被重新分配位置;按照一种标准的方式来宣布它们的存在;而在COM组件定义最主要是的接口,接口就是提供两个不同对象间的一种连接。计算机程序是通过一组函数而进行连接的,这组函数就是定义了程序中不同部分的接口。DLL的接口就是它所输出的那些函数。C++类的接口就是该类的成员函数集。COM中的接口是一组由组件实现的提供给客户使用的函数。在COM中接口是一个包含函数指针数组的内存结构,数组元素是一个由组件实现的函数地址,而COM最主要的是通过接口来提供最终用户所要的功能。.
ArcObjects中包括了大量的接口、界面、属性和方法,所有的使用ArcObjects开发的人员都可以使用这些工具和接口,比如:一个客户端ArcMap™,在进行地图图层着色的时候调用了Map.dll库及接口。
所以,COM是连接一个软件模型和另一个软件模型的一种协议,并且是一种独立的一种语言,符合二进制规范,并且客户端调用服务器端服务给予响应,而且所有通讯是通过接口进行,如下图示例所
所有ArcGIS类库都位置安装目录下/Program Files/ArcGIS/com目录中并且执行基于COM机制的ArcObjects组件,这种基于AO组件的DLL位于安装目录下 /Program Files/ArcGIS/bin 目录下,通常我们可以通过ArcObjects的开发工具来获得ArcObjects组件的接口信息,当然我们也可以通ArcObjects的对象模型图来获得ArcObjects组件的接口信息,ESRI提供了一个ESRI object viewer.的工具来查看ArcObjects组件的接口信息,另外你也可以通过帮助来查看ArcObjects组件的接口信息,在ESRI Library Locator是一个有效的查找对象类库,其中包括了接口、类、列举、结构,这些工具位于安装目录下/Program Files/ArcGIS/DeveloperKit/tools下,提供了LibraryLocator, EOBrowser 和 OleView等,如图所示:
COM 类:通过COM组件来进行开发意味着使用COM接口和开发者进行通信,所有信息交换都是通过对象与接口来进行的,而在AE中的接口很多是其内部存在一个或多个接口关联,从而在这些类中实现GIS的所有功能,所有COM对象都继承IUnknown 接口,这个IUnknown接口主要做两部分工作,它控制对象的生存周期和提供运行支持,对象生命周期的控制有两种方法:AddRef 和Release,如图所示:
我们可以从图中知道,Map对象是继承于IUnknown,并可实例化并创建。
在VB的环境中通过 TypeOf操作来判断或通过 QueryInterface (QI)的返回值回进行判断,比如:PageLayout 和Map coclasses类都支持IActiveView,通过TypeOf 判断操作知道当前视图是显示在ArcMap,对于coclasses类是可以实例化并创建的,例如:
在主个实例中,我们定义了一个IMap对象,并创建了一个Map赋值给IMap来进行相应的操作。
我们可以通过上面的对象图知道MAP具有的接口,例如我们可以这样使用它:
从上面可以知道定义了一个IMap,创建了一个实例化的Map,并把IMap指向这个实例化的Map ,那么我们就可以使用IMap的方法和属性了,并且哥以进行相关Map 的操作。
待续中