OLE自動化技術在Delphi與MapInfo集成地圖開發(fā)中

2011-04-21 22:18:43來源:互聯(lián)網

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