毕业论文(设计)基于.NET 框架的COM 回调机制在开发GIS 中的应用38094.doc
《毕业论文(设计)基于.NET 框架的COM 回调机制在开发GIS 中的应用38094.doc》由会员分享,可在线阅读,更多相关《毕业论文(设计)基于.NET 框架的COM 回调机制在开发GIS 中的应用38094.doc(8页珍藏版)》请在三一办公上搜索。
1、基于.NET框架的COM回调机制在开发GIS中的应用马奎 李宏伟 毛彪(信息工程大学测绘学院,郑州,450052)摘要:MapInfo软件是应用十分广泛的主流GIS软件之一,Microsoft.NET是微软公司推出的新平台,具有强大的全方位技术兼容性,而COM技术作为OLE技术的延伸,可以实现几乎所有组件的通信操作。基于这些方面,本文利用.NET框架下的COM组件包装技术与经该技术打包后的COM回调机制实现了更具简便性与灵活性的GIS开发,详细探讨了该机制在MapInfo二次开发中的实现思路及其关键技术点,取得了较为满意的应用效果。关键词 .NET Framework COM MapInfo
2、回调机制 地理信息系统The CallBack Mechanism of COM Based on .NETFramework in Development of GISMA Kui, LI Hong-wei, MAO Biao(Institute of Surveying and Mapping, Information Engineering University, Zhengzhou Henan, 450052, China)Abstract MapInfo is one of the main software of GIS which is used broadly. Microso
3、ft.NET, a new platform of the Microsoft, which has an excellent power of technic compatibility. And COM is the advanced technic of OLE, accomplishes almost all the communication between components of different softwares. Then based on the .NET component packing technic to COM and CallBack Mechanism
4、of the packed COM, it can be more simple and flexible to exploder the GIS. This article will give you a deep discussion of the CallBack Mechanism about its thoughts and technologies in secondary exploration of MapInfo, and finally get a satisfaction to its application.Key Words .NET Framework COM Ma
5、pInfo CallBack Mechanism GIS1、引言通用的地理信息系统主要是用来执行各类空间数据的输入和编辑、存储和管理、分析和处理、显示和制图的空间数据管理系统。针对其不能完全满足专业领域GIS的需求,也就产生了许多GIS的二次开发工具,或者相关人员直接从底层开发专业的GIS系统。显然两种方式各具其自身特点及应用需求,前者适合快速开发,专业应用中会受到通用GIS的限制,后者适于开发具有自主知识产权的专业GIS系统,但这种方式耗时、费力,需要投入大量的人力与智力。本文就是本着快速便捷的原则,同时又不失时代性地选择了.NET框架作为开发平台,以当今主流最新通用桌面GIS软件MapIn
6、fo Professional 8.0作为二次开发对象,利用两者均支持Oracle远程数据库的特性,开发了一套可支持网络的地区级电力管理GIS。本文主要探讨该系统单机部分MapInfo二次开发的关键技术基于.NET的COM组件回调机制的实现与应用,该技术具有一定的技术创新性且整合的效果较好。本文开发的系统自有其特点:系统兼具MapInfo系统高效图形化管理、强大分析功能的优点,也能充分利用.NET框架下一系列快速高效的可视化开发工具,开发具备界面交互性良好且拥有高效数据分析、处理能力的应用系统。简单的讲,系统等于是运行了两个应用程序:后台MapInfo程序侧重于地图显示与数据储备,前台客户程序
7、侧重于用户界面交互与数据分析处理。显然在上述开发过程中,用户对后台MapInfo操作不透明,即“用户无法通过普通方法来获取MapInfo中的地理信息与状态变化”1,为此可以利用MapInfo提供的一种客户程序消息反馈机制,简称回调(callback)1。.NET之前的MapInfo回调利用的是OLE(对象链接与嵌入)技术结合相关开发平台(如VC+/VB/Delphi等)实现的,类似的原理:但在.NET开发方式中并不是单纯的OLE对象嵌入,而是通过.NET提供的COM组件包装器(wrapper),将MapInfo提供的COM回调接口进行.NET封装,使之成为具备.NET特性的组件,然后再实现其与
8、其他.NET组件的相互通信。下面本文就这一转换进行专门的论述。2、MapInfo回调技术的开发平台相关特性.NET Framework是一种在Windows平台上编程的新架构一种新的API,包含通用语言运行时(CLR)和框架类库(FCL)。微软公司主要是为了实现“向后兼容”2以方便支持今后出现和扩展的新技术,以使开发人员可以轻松编写优秀软件而推行的新平台,是一种新开端。但.NET并没有推翻之前的软件,它仍然支持现有的软件,即实现向前兼容。另外,现有的软件组件“在Windows上的软件通信,几乎都是使用COM实现的”2。因此,.NET提供了支持现有COM组件的包装器(wrapper),以便.NE
9、T组件与之通信。2.1 OLE支持的回调如引言中所言,.NET之前的MapInfo回调其实是OLE技术结合非.NET开发平台实现的。OLE技术,举例描述,它在很大程度上仅是把不同类型的办公文档链接在一起,所以利用它可以把一个小Excel电子表格放在Word文档中。相关的开发平台如Delphi可以通过编程的方式实现回调这一过程。具体实现的过程,请参见1,3,此类技术文章在相关技术网站或论坛上较多,因不是本文重点就不再赘述。2.2 .NET支持的COM回调COM(组件对象模型)是作为OLE开发出来的,之后,它逐步演化为COM、DCOM(分布式组件对象模型)和最终的COM+。COM+是一种复杂的技术
10、,它是几乎所有组件通信方式的基础,实现了事务处理、消息传输服务和对象池。随着新功能的加入,它就会比以前更加复杂,这也是导致.NET Framework产生的直接原因。而.NET要实现MapInfo回调,必须将MapInfo的COM回调接口进行包装,这个过程已经脱离了OLE二次开发的技术范畴,经过包装的COM组件已经具备.NET组件的一切特性,因而说.NET实现MapInfo回调过程其实是基于.NET组件通信技术的具体实例,因而该回调技术已经不同于前期相关开发平台的OLE开发方式,因而在继续探讨之前必须探讨一下这个所谓“回调技术的开发平台相关特性”。3、回调机制的实现机理在介绍回调机制原理之前,
11、先讨论一下“回调机制”与“回调”两个概念。前面提到的回调(callback)是MapInfo提供的一种向客户程序反馈消息的过程,单纯的理解它是单向的,即从后台到前台的过程。对于这种开发方式,单向且前台与后台没有交互的话,系统很难实现稍复杂的GIS操作。因而,出于系统考虑,本文将客户到后台、后台到客户以及两者交互的整个过程统称为“回调机制”,统称这种二次开发方式为“回调机制”的实现。.NET的COM组件包装器wrapper封装的过程相当复杂,而且是在.NET内部实现的,要了解该过程的理论实现请参见2。在Visual Studio 2005中打开或新建一个工程后,打开“添加引用”在“COM”项中找
12、到“MapInfo 8.0 OLE Automation Type Library”,单击“确定”之后,该COM组件就被加载到工程中了。另外,.NET会在工程文件中创建程序集文件“Interop.MapInfo.dll”(如图1,中上部方框),它是带有.NET包装器类的.NET程序集。打开“对象浏览器”找到该程序集就可以浏览其内部的类及相关接口。使用时,在相关程序文件中加载语句“Using MapInfo”(“MapInfo”是.NET所谓的“命名空间”,并不等于程序集名称)。在本文所述的系统中,按照软件内部各部分之间的关系,进行了宏观上的抽象,大体可以分成三大部分:(如图1)客户组件、回调组
13、件以及后台服务端组件。程序运行后,外在的窗体就相当于客户组件,它主要负责与用户交互,调出并显示后台MapInfo地图窗口显示地图,打开并链接数据库、属性数据处理等相关操作;所谓“后台服务端”组件,就相当于一个MapInfo服务器程序,抽象地说,它其实就做一项工作:接受外来指令并将处理后的结果返还客户程序;回调组件,已经不是上面所提到的COM对象引用(“Interop.MapInfo.dll”),在本系统中,它被二次封装,封装后的结果相当于一个纯.NET组件,即这里所指的“回调组件”(具体封装见文章第四部分),其作用主要是负责后台的启动、关闭、控制等等复杂操作,用来协调客户程序与后台程序的交互问
14、题,这部分是系统成败的关键。4、实现回调机制的关键技术点在第三部分中可了解,宏观上的回调机制由三部分组成。但在具体实现中必须按照功能将各个部分进行进一步的抽象与细化,而在本文中将重点讲述回调组件的抽象与封装。本文将从两个方面进行讲述:交互封装,callback封装。callback封装指后台到客户过程的封装。交互封装多数情况下为客户到后台的封装包,在一定情况下交互封装还要与callback封装进行通信,因而它还要实现一定的客户与后台交互的工作,所以叫交户封装。紧随各自之后,分别以本系统的两个具体实现难点加以举例详述。4.1 交互封装在本系统中,后台的驱动主要是后台MapInfo执行相关MapB
15、asic语言命令的结果。交互封装组件中主要是将所要使用到的MapBasic语言命令按照基本功能单元进行封装,以实现地图的开关、显示、编辑、存储、制图与控制等基本GIS的地图操作功能。该交互封装组件的内核被定义为一个类:CSMapInfo,其成员变量以及方法构成了多数回调组件的核心。下面具体讲述: 后台程序的化身:mapInfoAppClass。它是MapInfo命名空间中类MapInfoApplicationClass的对象,当实例化之后,它代表的就是后台MapInfo应用程序。这里需要注意,后台MapInfo一般情况下只能是一个,所以在定义该对象的时候要使用Static标识符,目的就是使创建
16、的后台MapInfo程序唯一。 创建callback封装组件MyCallBack的对象myCallBack。该对象代表所有后台回调客户端的处理代码,其实是一个消息处理集合。它也是唯一的,因而也要使用Static标识符,该封装还会在2.3中具体讲述。以上两步定义与实例化代码如下:private static MapInfo.MapInfoApplicationClass mapInfoAppClass;private static MyCallBack myCallBack; public CSMapInfo()this.mapInfoAppClass = new MapInfoApplicat
17、ionClass(); this.myCallBack = new MyCallBack(); this.mapInfoAppClass.SetCallback(myCallBack);/在后台程序中注册回调对象 相关功能命令的集成。它们是一个方法集,其中封装了几乎所有的MapBasic语句,当客户端需要时,会直接调用并作用于后台程序。具体方法及MapBasic命令语句这里不再赘述,详见4。下面以系统中实现图层与注记的动态控制来具体察看这部分的工作原理。4.2 图层与注记的动态控制在通用GIS平台MapInfo软件上,地图均以图层的方式进行存储与显示5。当打开的图层较多后,地图显示刷新速度会受
18、到极大影响,因而不利于地图的界面交互。如果还要显示注记那么地图响应速度将大大放慢。于是当务之急就是要解决这个关乎GIS应用前景的问题。通常情况下,二次开发解决这个问题较为复杂,而从底层开发的方式工作量更大且难度高。本系统的解决方法主要是:在图层打开之后通过设置其显示比例尺的条件,这样对应不同的比例尺显示不同的图层,从而达到动态控制图层显示的问题。类似的处理方式,对于注记标注的动态显示也可以采用这种方式加以解决。仅就图层动态控制的解决思路大体步骤如下:调用交互封装组件中读取地图的方法打开某个图层;获取该图层显示条件;继续调用交互封装组件中设置图层状态的命令方法集设置该图层的显示参数(如图图3,图
19、层控制中红色打勾的图层与注记即在非显示状态)。该实现仅是回调过程中最简单的客户端向后台服务器发送指令的过程,随后的图层或注记动态显示的问题就是后台服务器自发的实现。4.3 callback封装在2.1中提到的callback封装组件MyCallBack,其实是一个消息集合,即后台回调客户程序的入口,所有回调消息先要经过该组件的识别与筛选,然后再将进一步的处理交给相应的客户端处理区。该消息集中罗列的消息处理函数有两种情况:MapBasic内部事件,直接提供给用户编写消息处理代码而无需再定义,比如:对状态条变化的反应SetStatusText,对地图窗口变化的反应WindowContentsCha
20、nged等等4;另外,就是自定义消息,它们可以依据用户不同的需求编写不同的消息处理代码。MapBasic内部事件。以状态条变化消息SetStatusText为例,说明地图窗口变化后,后台是如何回调客户程序的。在MyCallBack中的SetStatusText(string str)方法里添加处理消息的代码:分解后台传出的字符串str为三部分,分别代表比例尺、正在编辑的图层名称、鼠标选择的对象,然后再将它们传递给客户端自己的状态栏里从而显示地图的状态(如图4:客户程序模仿MapInfo的状态栏)。 自定义消息。以系统实现属性查询中较为困难的由图形查找属性为例,下面简要介绍自定义的回调消息:鼠标
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 毕业论文设计基于.NET 框架的COM 回调机制在开发GIS 中的应用38094 毕业论文 设计 基于 NET 框架 COM 机制 开发 GIS 中的 应用 38094
链接地址:https://www.31ppt.com/p-3974162.html