OLE自动化技术在Delphi与MapInfo集成地图开发中
摘要:本文论述了利用OLE 自动化技术和可视化编程工具Delphi 来实现MapInfo 地图的集
成,并通过例程的方式介绍了集成地图的方法以及对MapInfo 的消息回调。从而实现了
MapInfo 集成到Delphi 应用系统中,达到高效开发应用型GIS(地理信息系统)软件的目的。
关键词: 地理信息系统;OLE;MapInfo;Delphi;回调
The Application Of OLE Automation Technology In Map-integration Between Delphi And MapInfo TONG Gang, SHEN Qing-hua,BI Wei-zhun (College of Automation and Electronic, Qingdao University of Science and Technology, Qingdao 266042, China)
Abstract :The method of realizing map-integration between Delphi and MapInfo using OLE automation technology is discussed, and the method of Map Integration and the Callbacks of MapInfo message is also introduced with example in this article. So MapInfo is integrated in application of Delphi to develop efficiently applied GIS(Geographical Information System).
Key words:GIS ;OLE ;MapInfo ;Delphi ;Callbacks
1 引言
在Windows系统中,MapInfo二次开发方法主要有两种,即利用自身所带的开发工具
MapBasic和利用诸如 Delphi、VC等优秀开发工具。利用MapBasic 这样自带的开发工具开
发出来的程序必须在MapInfo环境中运行,系统资源开销大,开发效率不高,功能也不强,
难以开发界面友好而功能强大的定制程序,他较适合扩展MapInfo的功能。利用Delphi之类
的优秀开发工具进行二次开发,后台对地图的处理依然采用MapInfo支撑软件,但由于前台
采用了Delphi这样的专业开发工具,在开发效率、开发能力、汉化、移植性等方面都优于自
带的工具,同时能随整个软件开发行业的发展不断发展[1]。此种方法的关键是前台定制程序
与后台MapInfo之间的结合方式。目前主要有利用OLE Automation 和利用MapX标准组件进
行开发。
Delphi是美国INPRISE公司的面向对象的可视化软件开发工具,具有非常强大的功能,
可以快速、高效地开发出基于Windows环境下的各类程序,尤其是在界面设计、数据库编程
等方面具有独到之处。面向对象和可视化设计是其最突出的优点,同时,它具有强大的编译
能力,从而大大提高了程序的执行效率,成为众多程序员的开发工具。
2 OLE 自动化技术
OLE(Object Linking and Embedding)是美国Atduscorporation提出的一组协议和函数,
目的是为了简化复合文件的建立和维护,它是微软Windows系统中最为复杂的子系统,是进
程间通信的一种形式。所谓对象链接是指一个复合文件内含一个参考指针引用到其它应用程
序的对象,透过OLE把Windows各个应用程序连接起来。
利用这种能使用户共享不同应用程序信息资源的OLE技术,可以很容易地集成各类应用
程序。OLE自动化是一种为WINDOWS设计的交互进程通信机制,它允许在不同的应用程序
之间相互访问,可以让一个应用程序访问另一个应用程序或DLL(动态链接库),如在Delphi中创建EXCEL中的表格等,而且可以访问这些应用程序对象的方法(Method)与属性
(Property),它克服了链接和嵌套中存在的缺点,即无法用编程手段对对象进行控制,实现
了对OLE组件的编程式控制。OLE 自动化包括两部分应用程序:一个是把OLE 组件显现出
来使之可控制的应用程序,叫做OLE 自动化服务器;另一个是利用OLE服务器提供的组件,
对该对象进行控制操作的应用程序,叫做OLE客户。由于OLE 自动化服务器很小,程序的
稳定性以及开发和维护都要优于传统的大程序。对于每个OLE对象的属性和方法,程序员可
以决定将OLE自动化服务器的某些属性和方法通过OLE 自动化表现出来,而私有对象对于
外部用户来说是不可见的,但是OLE客户编程人员只需知道包含对象的应用程序的名称、对
象的类的名称和想要使用的属性和方法的名称,就可以使用自动化服务器了[3]。通过OLE自
动化技术,运用Delphi语言可以很方便地进行地图集成,此时,Delphi程序即为客户程序。
3 利用OLE 自动化技术实现地图集成
进行 Delphi 与MapInfo 的集成开发时,可以将Delphi 作为OLE 自动化的控制方或DDE
的客户,把MapInfo 置于后台运行,但最好采用OLE 自动化方式,因为这种方式比DDE
方式更快、更可靠,并且在调试运行中可以获得更多出错信息。OLE 自动化是Windows 程
序之间相互操作的技术,可以创建自动化客户程序来操纵其他程序,而MapInfo 则可以作为
OLE 对象的服务器,并提供了一套相应的方法。
3.1 实现Delphi 取得对MapInfo Professional 的控制和服务
Delphi 程序中通过特定的ActiveX 控制接口,执行相应接口方法函数,MapInfo
Professional 发出控制命令,取得其服务,达到操纵嵌入在Delphi 程序界面上的MapInfo 图
形资料的目的。对于此技术点可以利用Delphi 对ActiveX(OLE)支持的函数启动和控制
MapInfo Professional 运行。OLE 自动化是Windows 程序之间相互操作的技巧, Delphi 完全
支持OLE 自动化操作,可以创建自动化客户程序来操作其他的程序,而MapInfo 则可以作
为OLE 对象的服务器,并提供了相应的一套方法,Delphi 通过建立一个OLE 对象来创建客
户自动化程序,要创建OLE 对象,需调用CreateOLE—Object 函数(在comObj 单元中定义),
并且把返回结果赋给一个Variant 类型的变量,以后程序就通过这个变量来访问 OLE 对象。
这时的Delphi 程序是ActiveX (OLE)客户应用程序,控制MapInfo Professional 运行, 在后
台运行的MapInfo Professional 是ActiveX (OLE)自动化服务器,为Delphi 程序提供服务。
Delphi 与MapInfo Professional 的结合方式如图1。
图1 Delphi 与MapInfo Professional 的结合方式
Fig.1 Combination of MapInfo Professional and Delphi
3.2 Delphi 应用程序与MapInfo 的集成
(1)建立MapInfo 自动化对象
Delphi 创建客户自动化程序是通过建立一个OLE 对象来实现的,要创建OLE 对象,需
调用CreateOLEObject 函数(在OLEAUTO 单元中定义),并把返回结果赋给一个Variant 类
型的变量,以后程序就通过这个变量来访问OLE 对象。设变量名为Olemapinfo,其具体语句
如下:
var OleMapInfo:Variant;//在Delphi 应用程序中声明OLE Variant 类型的变量
Olemapinfo:=CreateOleobject(‘mapinfo.application’);//创建OLE 对象
加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW
或用微信扫描左侧二维码