OLE自動(dòng)化技術(shù)在Delphi與MapInfo集成地圖開發(fā)中
摘要:本文論述了利用OLE 自動(dòng)化技術(shù)和可視化編程工具Delphi 來實(shí)現(xiàn)MapInfo 地圖的集
成,并通過例程的方式介紹了集成地圖的方法以及對MapInfo 的消息回調(diào)。從而實(shí)現(xiàn)了
MapInfo 集成到Delphi 應(yīng)用系統(tǒng)中,達(dá)到高效開發(fā)應(yīng)用型GIS(地理信息系統(tǒng))軟件的目的。
關(guān)鍵詞: 地理信息系統(tǒng);OLE;MapInfo;Delphi;回調(diào)
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系統(tǒng)中,MapInfo二次開發(fā)方法主要有兩種,即利用自身所帶的開發(fā)工具
MapBasic和利用諸如 Delphi、VC等優(yōu)秀開發(fā)工具。利用MapBasic 這樣自帶的開發(fā)工具開
發(fā)出來的程序必須在MapInfo環(huán)境中運(yùn)行,系統(tǒng)資源開銷大,開發(fā)效率不高,功能也不強(qiáng),
難以開發(fā)界面友好而功能強(qiáng)大的定制程序,他較適合擴(kuò)展MapInfo的功能。利用Delphi之類
的優(yōu)秀開發(fā)工具進(jìn)行二次開發(fā),后臺(tái)對地圖的處理依然采用MapInfo支撐軟件,但由于前臺(tái)
采用了Delphi這樣的專業(yè)開發(fā)工具,在開發(fā)效率、開發(fā)能力、漢化、移植性等方面都優(yōu)于自
帶的工具,同時(shí)能隨整個(gè)軟件開發(fā)行業(yè)的發(fā)展不斷發(fā)展[1]。此種方法的關(guān)鍵是前臺(tái)定制程序
與后臺(tái)MapInfo之間的結(jié)合方式。目前主要有利用OLE Automation 和利用MapX標(biāo)準(zhǔn)組件進(jìn)
行開發(fā)。
Delphi是美國INPRISE公司的面向?qū)ο蟮目梢暬浖_發(fā)工具,具有非常強(qiáng)大的功能,
可以快速、高效地開發(fā)出基于Windows環(huán)境下的各類程序,尤其是在界面設(shè)計(jì)、數(shù)據(jù)庫編程
等方面具有獨(dú)到之處。面向?qū)ο蠛涂梢暬O(shè)計(jì)是其最突出的優(yōu)點(diǎn),同時(shí),它具有強(qiáng)大的編譯
能力,從而大大提高了程序的執(zhí)行效率,成為眾多程序員的開發(fā)工具。
2 OLE 自動(dòng)化技術(shù)
OLE(Object Linking and Embedding)是美國Atduscorporation提出的一組協(xié)議和函數(shù),
目的是為了簡化復(fù)合文件的建立和維護(hù),它是微軟Windows系統(tǒng)中最為復(fù)雜的子系統(tǒng),是進(jìn)
程間通信的一種形式。所謂對象鏈接是指一個(gè)復(fù)合文件內(nèi)含一個(gè)參考指針引用到其它應(yīng)用程
序的對象,透過OLE把Windows各個(gè)應(yīng)用程序連接起來。
利用這種能使用戶共享不同應(yīng)用程序信息資源的OLE技術(shù),可以很容易地集成各類應(yīng)用
程序。OLE自動(dòng)化是一種為WINDOWS設(shè)計(jì)的交互進(jìn)程通信機(jī)制,它允許在不同的應(yīng)用程序
之間相互訪問,可以讓一個(gè)應(yīng)用程序訪問另一個(gè)應(yīng)用程序或DLL(動(dòng)態(tài)鏈接庫),如在Delphi中創(chuàng)建EXCEL中的表格等,而且可以訪問這些應(yīng)用程序?qū)ο蟮姆椒ǎ∕ethod)與屬性
(Property),它克服了鏈接和嵌套中存在的缺點(diǎn),即無法用編程手段對對象進(jìn)行控制,實(shí)現(xiàn)
了對OLE組件的編程式控制。OLE 自動(dòng)化包括兩部分應(yīng)用程序:一個(gè)是把OLE 組件顯現(xiàn)出
來使之可控制的應(yīng)用程序,叫做OLE 自動(dòng)化服務(wù)器;另一個(gè)是利用OLE服務(wù)器提供的組件,
對該對象進(jìn)行控制操作的應(yīng)用程序,叫做OLE客戶。由于OLE 自動(dòng)化服務(wù)器很小,程序的
穩(wěn)定性以及開發(fā)和維護(hù)都要優(yōu)于傳統(tǒng)的大程序。對于每個(gè)OLE對象的屬性和方法,程序員可
以決定將OLE自動(dòng)化服務(wù)器的某些屬性和方法通過OLE 自動(dòng)化表現(xiàn)出來,而私有對象對于
外部用戶來說是不可見的,但是OLE客戶編程人員只需知道包含對象的應(yīng)用程序的名稱、對
象的類的名稱和想要使用的屬性和方法的名稱,就可以使用自動(dòng)化服務(wù)器了[3]。通過OLE自
動(dòng)化技術(shù),運(yùn)用Delphi語言可以很方便地進(jìn)行地圖集成,此時(shí),Delphi程序即為客戶程序。
3 利用OLE 自動(dòng)化技術(shù)實(shí)現(xiàn)地圖集成
進(jìn)行 Delphi 與MapInfo 的集成開發(fā)時(shí),可以將Delphi 作為OLE 自動(dòng)化的控制方或DDE
的客戶,把MapInfo 置于后臺(tái)運(yùn)行,但最好采用OLE 自動(dòng)化方式,因?yàn)檫@種方式比DDE
方式更快、更可靠,并且在調(diào)試運(yùn)行中可以獲得更多出錯(cuò)信息。OLE 自動(dòng)化是Windows 程
序之間相互操作的技術(shù),可以創(chuàng)建自動(dòng)化客戶程序來操縱其他程序,而MapInfo 則可以作為
OLE 對象的服務(wù)器,并提供了一套相應(yīng)的方法。
3.1 實(shí)現(xiàn)Delphi 取得對MapInfo Professional 的控制和服務(wù)
Delphi 程序中通過特定的ActiveX 控制接口,執(zhí)行相應(yīng)接口方法函數(shù),MapInfo
Professional 發(fā)出控制命令,取得其服務(wù),達(dá)到操縱嵌入在Delphi 程序界面上的MapInfo 圖
形資料的目的。對于此技術(shù)點(diǎn)可以利用Delphi 對ActiveX(OLE)支持的函數(shù)啟動(dòng)和控制
MapInfo Professional 運(yùn)行。OLE 自動(dòng)化是Windows 程序之間相互操作的技巧, Delphi 完全
支持OLE 自動(dòng)化操作,可以創(chuàng)建自動(dòng)化客戶程序來操作其他的程序,而MapInfo 則可以作
為OLE 對象的服務(wù)器,并提供了相應(yīng)的一套方法,Delphi 通過建立一個(gè)OLE 對象來創(chuàng)建客
戶自動(dòng)化程序,要?jiǎng)?chuàng)建OLE 對象,需調(diào)用CreateOLE—Object 函數(shù)(在comObj 單元中定義),
并且把返回結(jié)果賦給一個(gè)Variant 類型的變量,以后程序就通過這個(gè)變量來訪問 OLE 對象。
這時(shí)的Delphi 程序是ActiveX (OLE)客戶應(yīng)用程序,控制MapInfo Professional 運(yùn)行, 在后
臺(tái)運(yùn)行的MapInfo Professional 是ActiveX (OLE)自動(dòng)化服務(wù)器,為Delphi 程序提供服務(wù)。
Delphi 與MapInfo Professional 的結(jié)合方式如圖1。
圖1 Delphi 與MapInfo Professional 的結(jié)合方式
Fig.1 Combination of MapInfo Professional and Delphi
3.2 Delphi 應(yīng)用程序與MapInfo 的集成
(1)建立MapInfo 自動(dòng)化對象
Delphi 創(chuàng)建客戶自動(dòng)化程序是通過建立一個(gè)OLE 對象來實(shí)現(xiàn)的,要?jiǎng)?chuàng)建OLE 對象,需
調(diào)用CreateOLEObject 函數(shù)(在OLEAUTO 單元中定義),并把返回結(jié)果賦給一個(gè)Variant 類
型的變量,以后程序就通過這個(gè)變量來訪問OLE 對象。設(shè)變量名為Olemapinfo,其具體語句
如下:
var OleMapInfo:Variant;//在Delphi 應(yīng)用程序中聲明OLE Variant 類型的變量
Olemapinfo:=CreateOleobject(‘mapinfo.application’);//創(chuàng)建OLE 對象
pid控制相關(guān)文章:pid控制原理
評論