资源预览内容
第1页 / 共9页
第2页 / 共9页
第3页 / 共9页
第4页 / 共9页
第5页 / 共9页
第6页 / 共9页
第7页 / 共9页
第8页 / 共9页
第9页 / 共9页
亲,该文档总共9页全部预览完了,如果喜欢就下载吧!
资源描述
专业好文档更多测绘论文请登录测绘网论文频道查询:更多测绘论文请登录测绘网论文频道查询:http:/www.cehuiwang.com 客服热线:010-基于基于.NET.NET 框架的框架的 COMCOM 回调机制在开发回调机制在开发 GISGIS 中的应用中的应用马奎 李宏伟 毛彪(信息工程大学测绘学院,郑州, )摘要摘要:MapInfo 软件是应用十分广泛的主流 GIS 软件之一,Microsoft.NET 是微软公司推出的新平台,具有强大的全方位技术兼容性,而 COM 技术作为 OLE 技术的延伸,可以实现几乎所有组件的通信操作。基于这些方面,本文利用.NET 框架下的 COM 组件包装技术与经该技术打包后的 COM 回调机制实现了更具简便性与灵活性的 GIS 开发,详细探讨了该机制在 MapInfo 二次开发中的实现思路及其关键技术点,取得了较为满意的应用效果。关键词关键词 .NET Framework COM MapInfo 回调机制 地理信息系统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, , China) Abstract MapInfo is one of the main software of GIS which is used broadly. Microsoft.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 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 MapInfo CallBack Mechanism GIS1、引言、引言通用的地理信息系统主要是用来执行各类空间数据的输入和编辑、存储和管理、分析和处理、显示和制图的空间数据管理系统。针对其不能完全满足专业领域 GIS 的需求,也就产生了许多 GIS 的二次开发工具,或者相关人员直接从底层开发专业的 GIS 系统。显然两种方式各具其自身特点及应用需求,前者适合快速开发,专业应用中会受到通用 GIS 的限制,后者适于开发具有自主知识产权的专业 GIS 系统,但这种方式耗时、费力,需要投入大量的人力与智力。本文就是本着快速便捷的原则,同时又不失时代性地选择了.NET 框架作为开发平台,以当今主流最新通用桌面 GIS 软件 MapInfo Professional 8.0 作为二次开发对象,利用两者均支持 Oracle 远程数据库的特性,开发了一套可支持网络的地区级电力管理GIS。本文主要探讨该系统单机部分 MapInfo 二次开发的关键技术基于.NET 的 COM 组件回调机制的实现与应用,该技术具有一定的技术创新性且整合的效果较好。本文开发的系统自有其特点:系统兼具 MapInfo 系统高效图形化管理、强大分析功能的优点,也能充分利用.NET 框架下一系列快速高效的可视化开发工具,开发具备界面交互性良好且拥有高效数据分析、处理能力的应用系统。简单的讲,系统等于是运行了两个应用程序:后台 MapInfo 程序侧重于地图显示与数据储备,前台客户程序侧重于用户界面交互与数据分析处理。显然在上述开发过程中,用户对后台 MapInfo 操作不透明,即“用户无法通过普通方法来获取专业好文档更多测绘论文请登录测绘网论文频道查询:更多测绘论文请登录测绘网论文频道查询:http:/www.cehuiwang.com 客服热线:010-MapInfo 中的地理信息与状态变化”1,为此可以利用 MapInfo 提供的一种客户程序消息反馈机制,简称回调(callback)1。.NET 之前的 MapInfo 回调利用的是 OLE(对象链接与嵌入)技术结合相关开发平台(如 VC+/VB/Delphi 等)实现的,类似的原理:但在.NET 开发方式中并不是单纯的 OLE 对象嵌入,而是通过.NET 提供的 COM 组件包装器(wrapper),将 MapInfo 提供的 COM 回调接口进行.NET 封装,使之成为具备.NET 特性的组件,然后再实现其与其他.NET 组件的相互通信。下面本文就这一转换进行专门的论述。2、MapInfo 回调技术的开发平台相关特性回调技术的开发平台相关特性.NET Framework 是一种在 Windows 平台上编程的新架构一种新的 API,包含通用语言运行时(CLR)和框架类库(FCL)。微软公司主要是为了实现“向后兼容”2以方便支持今后出现和扩展的新技术,以使开发人员可以轻松编写优秀软件而推行的新平台,是一种新开端。但.NET 并没有推翻之前的软件,它仍然支持现有的软件,即实现向前兼容。另外,现有的软件组件“在 Windows 上的软件通信,几乎都是使用COM 实现的”2。因此,.NET 提供了支持现有 COM 组件的包装器(wrapper),以便.NET 组件与之通信。2.1 OLE 支持的回调如引言中所言,.NET 之前的 MapInfo 回调其实是 OLE 技术结合非.NET 开发平台实现的。OLE 技术,举例描述,它在很大程度上仅是把不同类型的办公文档链接在一起,所以利用它可以把一个小 Excel 电子表格放在 Word 文档中。相关的开发平台如 Delphi 可以通过编程的方式实现回调这一过程。具体实现的过程,请参见1,3,此类技术文章在相关技术网站或论坛上较多,因不是本文重点就不再赘述。2.2 .NET 支持的 COM 回调COM(组件对象模型)是作为 OLE 开发出来的,之后,它逐步演化为 COM、DCOM(分布式组件对象模型)和最终的 COM+。COM+是一种复杂的技术,它是几乎所有组件通信方式的基础,实现了事务处理、消息传输服务和对象池。随着新功能的加入,它就会比以前更加复杂,这也是导致.NET Framework 产生的直接原因。而.NET 要实现 MapInfo 回调,必须将 MapInfo 的 COM 回调接口进行包装,这个过程已经脱离了 OLE二次开发的技术范畴,经过包装的 COM 组件已经具备.NET 组件的一切特性,因而说.NET 实现 MapInfo 回调过程其实是基于.NET 组件通信技术的具体实例,因而该回调技术已经不同于前期相关开发平台的 OLE开发方式,因而在继续探讨之前必须探讨一下这个所谓“回调技术的开发平台相关特性” 。3、回调机制的实现机理、回调机制的实现机理在介绍回调机制原理之前,先讨论一下“回调机制”与“回调”两个概念。前面提到的回调(callback)是 MapInfo 提供的一种向客户程序反馈消息的过程,单纯的理解它是单向的,即从后台到前台的过程。对于这种开发方式,单向且前台与后台没有交互的话,系统很难实现稍复杂的 GIS 操作。因而,出于系统考虑,本文将客户到后台、后台到客户以及两者交互的整个过程统称为“回调机制” ,统称这种二次开发方式为“回调机制”的实现。.NET 的 COM 组件包装器 wrapper 封装的过程相当复杂,而且是在.NET 内部实现的,要了解该过程的理论实现请参见2。在 Visual Studio 2005 中打开或新建一个工程后,打开“添加引用”在“COM”项中找到“MapInfo 8.0 OLE Automation Type Library”,单击“确定”之后,该 COM 组件就被加载到工程中了。另外,.NET 会在工程文件中创建程序集文件“Interop.MapInfo.dll” (如图 1,中上部方框) ,它是带有.NET 包装器类的.NET 程序集。打开“对象浏览器”找到该程序集就可以浏览其内部的类及相关专业好文档更多测绘论文请登录测绘网论文频道查询:更多测绘论文请登录测绘网论文频道查询:http:/www.cehuiwang.com 客服热线:010-接口。使用时,在相关程序文件中加载语句“Using MapInfo”(“MapInfo”是.NET 所谓的“命名空间” ,并不等于程序集名称)。在本文所述的系统中,按照软件内部各部分之间的关系,进行了宏观上的抽象,大体可以分成三大部分:(如图 1)客户组件、回调组件以及后台服务端组件。程序运行后,外在的窗体就相当于客户组件,它主要负责与用户交互,调出并显示后台 MapInfo 地图窗口显示地图,打开并链接数据库、属性数据处理等相关操作;所谓“后台服务端”组件,就相当于一个 MapInfo 服务器程序,抽象地说,它其实就做一项工作:接受外来指令并将处理后的结果返还客户程序;回调组件,已经不是上面所提到的 COM 对象引用(“Interop.MapInfo.dll” ) ,在本系统中,它被二次封装,封装后的结果相当于一个纯.NET 组件,即这里所指的“回调组件” (具体封装见文章第四部分) ,其作用主要是负责后台的启动、关闭、控制等等复杂操作,用来协调客户程序与后台程序的交互问题,这部分是系统成败的关键。4、实现回调机制的关键技术点、实现回调机制的关键技术点在第三部分中可了解,宏观上的回调机制由三部分组成。但在具体实现中必须按照功能将各个部分进行进一步的抽象与细化,而在本文中将重点讲述回调组件的抽象与封装。本文将从两个方面进行讲述:交互封装,callback 封装。callback 封装指后台到客户过程的封装。交互封装多数情况下为客户到后台的封装包,在一定情况下交互封装还要与 callback 封装进行通信,因而它还要实现一定的客户与后台交互的工作,所以叫交户封装。紧随各自之后,分别以本系统的两个具体实现难点加以举例详述。4.1 交互封装在本系统中,后台的驱动主要是后台 MapInfo 执行相关 MapBasic 语言命令的结果。交互封装组件中主要是将所要使用到的 MapBasic 语言命令按照基本功能单元进行封装,以实现地图的开关、显示、编辑、存储、制图与控制等基本 GIS 的地图操作功能。该交互封装组件的内核被定义为一个类:CSMapInfo,其成员变量以及方法构成了多数回调组件的核心。下面具体讲述: 后台程序的化身:mapInfoAppClass。它是 MapInfo 命名空间中类 MapInfoApplicationClass 的对象,当实例化之后,它代表的就是后台 MapInfo 应用程序。这里需要注意,后台 MapInfo 一般情
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号