Chap.01--ArcObjects開發(fā)基礎(AE10+VS2010).ppt_第1頁
Chap.01--ArcObjects開發(fā)基礎(AE10+VS2010).ppt_第2頁
Chap.01--ArcObjects開發(fā)基礎(AE10+VS2010).ppt_第3頁
Chap.01--ArcObjects開發(fā)基礎(AE10+VS2010).ppt_第4頁
Chap.01--ArcObjects開發(fā)基礎(AE10+VS2010).ppt_第5頁
已閱讀5頁,還剩149頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、GIS 應 用 開 發(fā) Developing GIS Applications with ArcObjects using C#.NET 江西省研究生優(yōu)質課程 主講:蘭小機 GIS博士、教授 Email : QQ :305333315 課件: 4/,蘭小機簡歷,主要經歷 1988年7月畢業(yè)于南方冶金學院工程測量專業(yè),獲學士學位,并留校任教 1994年6月畢業(yè)于武漢測繪科技大學工程測量專業(yè),獲碩士學位,回校任教 2005年6月畢業(yè)于南京師范大學地圖學與地理信息系統(tǒng)專業(yè),獲理學博士學位,回校任教 主要研究方向 GML空間數據挖掘 GML空間數據庫理論與GMLGIS

2、 空間數據集成與共享 GIS應用開發(fā),科研項目,國家自然科學基金項目-面向GML的時空關聯規(guī)則及序列模式挖掘研究(編號:40971234) ,35萬元,主持 國家自然科學基金項目-本原GML空間數據庫理論及GMLGIS與傳統(tǒng)GIS集成研究(編號:40761017) ,16萬元,主持 國家自然科學基金項目 - GML空間數據存儲索引機制研究(編號:40401045) ,26萬元,排名第二 地理信息科學江蘇省重點實驗室開發(fā)基金項目 -面向對象的GML空間數據庫及其應用研究(編號:JK20050302) ,5萬元主持 江西省教育廳科技項目GML空間數據庫理論及GMLGIS研究,1萬元,主持 萍鄉(xiāng)市基

3、礎地理信息系統(tǒng)研究與開發(fā),22萬元,主持 城市公眾地理信息服務系統(tǒng)研究與開發(fā),10萬元,主持,教學目標,GIS應用開發(fā)課程是GIS本科生、研究生重要的專業(yè)課程,通過課程的學習,了解ArcGIS 軟件體系結構及ArcObjects組件構成,并能熟練使用ArcObjects 進行應用型GIS開發(fā); 掌握應用型GIS開發(fā)的基本思路、技術方法.,教學內容及時間安排,教材及參考材料,教材: 基于ArcObjects與C#.NET的GIS應用開發(fā),蘭小機等編著,冶金工業(yè)出版社,2011年12月 最新課件 參考材料: ArcObjects SDK 10 Microsoft .NET Framework Ar

4、cGIS 開發(fā)工具包中的文檔,包括ArcGIS開發(fā)幫助、組件幫助、對象模型圖和示例,學習基礎,熟練掌握ArcGIS Desktop(ArcMap、ArcCatalog)基本操作; 了解Geodatabase、ArcSDE基本概念; 會用C#進行程序設計。,課程考核,開發(fā)一個小型的GIS應用系統(tǒng),按GIS軟件工程的要求進行設計,并提供完整的設計開發(fā)方案,開發(fā)的小系統(tǒng)應具備GIS的基本功能,主要包括: 打開、保存地圖文檔、添加數據 自定義命令、工具、菜單 空間數據符號化 空間數據管理 空間查詢與空間分析 空間數據編輯功能:基本編輯功能、高級編輯功能,計算機組件技術,組件GIS,組件式的GIS應用開

5、發(fā),Chap.1 Fundamentals of developing with ArcObjects,ArcGIS 系列產品與開發(fā)方式 ArcGIS Visual Studio IDE Integration Framework ArcObjects基礎 組件對象模型 .NET平臺概述 .NET組件與COM組件的互操作 ArcGIS開發(fā)資源,1 ArcGIS 系列產品與開發(fā)方式,ArcGIS Desktop ArcGIS Engine ArcGIS Server ArcGIS Mobile,開發(fā)類型: To customize or extend the ArcGIS Desktop app

6、lications Tobuild standalone mapping applications To develop Web applications,1.1 ArcGIS Desktop及其擴展,ArcGIS Desktop是GIS專業(yè)人員編輯、使用和管理地理信息的主要平臺,它按功能分為三個不同級別的產品: ArcView ArcEditor ArcInfo 每個產品主要包括:ArcMap、ArcCatlog、ArcGlobe、ArcScene桌面應用程序.,ArcGIS桌面應用程序定制/擴展方式 使用ArcGIS桌面應用程序的定制功能(Customzie),配置應用程序界面; 使用Py

7、thon 腳本,自動化GIS工作流 開發(fā)插件( add-in),定制/擴展ArcGIS 桌面應用程序 開發(fā)定制組件,擴展ArcGIS 桌面應用程序,1.1.1 使用Python 腳本,自動化GIS工作流,Python 是一種免費的、跨平臺的開源編程語言,它功能強大且簡單易學,因而得到了廣泛應用和支持。 ESRI 已將 Python 完全納入 ArcGIS 中,成為了一種用于數據分析、數據轉換、數據管理和地圖自動化的語言,因而有助于提高工作效率。 易于學習,非常適合初學者,也特別適合專家使用 可伸縮程度高,適于大型項目或小型的一次性程序(稱為腳本) 可移植,跨平臺 可嵌入(使 ArcGIS 可腳

8、本化) 穩(wěn)定成熟 用戶社區(qū)規(guī)模大,ArcGIS中的Python,Python是地理處理框架的重要組成,Python在ArcGIS中的發(fā)展,ArcPy,ArcPy -ArcGIS新的Python庫 由arcgisscripting升級而來 包含有函數(Function)、類(Class)和模塊(Module) 功能實現 能訪問所有gp工具 數據轉換、數據管理 數據分析 自動化制圖,ArcPy詳細參考: ArcGIS Desktop 10幫助專業(yè)庫地理處理ArcPy站點包,ArcPy 模塊 模塊為通常包含函數和類的 Python 文件。有一系列模塊支持 ArcPy,包括制圖模塊 (arcpy.ma

9、pping)、Spatial Analyst 模塊 (arcpy.sa) 和Geostatistical Analyst 模塊 (arcpy.ga)。 ArcPy 類 ArcPy 類,如 SpatialReference 和 Extent 類,通常用作地理處理工具參數設置的快捷方式,否則的話,這些參數會使用更加復雜的字符串。,ArcPy 函數 函數是用于執(zhí)行某項特定任務程序單元。 在 ArcPy 中,所有地理處理工具均以函數形式提供,但并非所有函數都是地理處理工具。除工具之外,ArcPy 還提供多種函數來更好地支持 Python 地理處理工作流。函數或方法可用于列出某些數據集、檢索數據集的屬性

10、、在將表添加到地理數據庫之前驗證表名稱,或執(zhí)行其他許多有用的腳本任務。,獨立的 Python 腳本 Python 腳本是可以執(zhí)行的 .py 文件。獨立 Python 腳本可通過兩種方式執(zhí)行:通過操作系統(tǒng)提示或開發(fā)應用程序(如 PythonWin),或在 Windows 資源管理器中雙擊 .py 文件。 Python 腳本工具 Python 腳本工具是已添加到地理處理工具箱的 Python 腳本。添加為腳本工具后,便可以像使用其他地理處理工具一樣使用此腳本工具 - 可以從工具對話框打開和執(zhí)行、可以在 Python 窗口和 ModelBuilder 中使用,并可以從其他腳本和腳本工具中調用。,Py

11、thon 窗口 ArcGIS 10使用 Python 窗口代替原來的命令行窗口, 通過Python窗口,用戶可以快捷地在 ArcGIS 內部使用 Python,從而以交互方式運行地理處理工具和功能以及充分利用其他 Python 模塊和庫。此窗口還為用戶學習 Python 提供了一個途徑。 Python窗口提供了智能感知和代碼自動完成功能.,簡單實例:,ArcGIS引入了后臺地理處理(Background Geoprocessing)的概念,允許Geoprocessing工具、ArcGIS操作同時運行(使用多核CPU)。,1.1.2 使用DLL組件擴展ArcGIS桌面,使用DLL組件擴展ArcG

12、IS桌面的優(yōu)勢: They can be easily delivered to end users via custom setup programs. You can hide your code and logic in a binary file. You can extend and customize virtually every aspect of the ArcGIS technology.,使用DLL組件擴展ArcGIS桌面 開發(fā)插件( add-in),定制/擴展ArcGIS 桌面應用程序(New in ArcGIS 10) 開發(fā)定制組件,擴展ArcGIS 桌面應用程序,A

13、rcGIS Desktop Add-in,Add-in是一種能夠快速擴展桌面應用程序功能的全新擴展方式 更加容易創(chuàng)建 更加容易共享 更加安全 更易安裝管理,ArcGIS 10 Add-in所支持的類型 按鈕和工具 組合框 菜單和右鍵菜單 Multi-items 工具條 Tool palettes 可??看绑w Application extensions Editor extensions,ArcGIS 10 Add-in支持的開發(fā)環(huán)境 Visual Studio 2008 + .Net3.5 Visual Studio 2010 + .Net3.5或者.Net4.0 Visual Basic/

14、C# 2008 Express Edition + .Net3.5 Visual Basic/C# 2010 Express Edition +.Net3.5 或者.Net4.0 Eclipse IDE for Java Developers,XML Metadata( Config.esriaddinx ),Add-in的部署 復制/郵件發(fā)送編譯好的esriaddin文件到需要部署機器上(已經安裝好ArcGIS 桌面); 在部署機器上雙擊esriaddin文件,彈出Add-in安裝界面,讓用戶查看該插件的一些元信息,然后讓用戶決定是否安裝該插件;安裝插件是不需要重啟任何ArcGIS Desk

15、top應用程序的。安裝完之后,就可以通過相應ArcGIS Desktop應用程序的Add-in Manager來查看已安裝的Add-in,也可以通過它來卸載。 一些Add-in所包含的對象,例如Command、Tool、Toolbar,是需要用戶通過Customize窗口定制添加到界面上的。Extension對象,則需要用戶通過Extensions窗口勾選加載。,Add-in共享與安全,實現局域網內共享,設置共享目錄、設置安全級別,Add-in 數字簽名,工具:ESRISignAddin.exe C:Program FilesCommon FilesArcGISbinESRISignAddIn

16、.exe,1.2 ArcGIS Engine,ArcGIS Engine是一個完整的嵌入GIS組件庫和工具,開發(fā)人員可以用來創(chuàng)建新的獨立的GIS應用程序或者在自定義的應用程序或已經存在的應用程序中嵌入GIS功能。 ArcGIS Engine是ArcObjects的子集,主要用于獨立的GIS應用開發(fā),它不依賴于ArcGIS Desktop。 ArcGIS Engine由兩部分組成:一個軟件開發(fā)包(SDK)和一個可分發(fā)的運行時(Runtime)。除此之外,應用程序的功能可以使用可選的擴展模塊來進行擴展。,ArcGIS Engine支持Windows平臺及跨平臺開發(fā)。 Windows平臺開發(fā),有以下

17、APIs: .NET VC+ 跨平臺開發(fā),有以下APIs: Java C+ for Windows C+ for Solaris/Linux,使用ArcGIS Engine控件開發(fā)獨立的GIS應用,Using the Winforms ArcGIS Engine controls Using ArcGIS Engine Controls in WPF (New in ArcGIS 10),1.3 ArcGIS Server,ArcGIS Server 是功能強大的基于服務器的 GIS 產品,用于構建集中管理的、支持多用戶的、具備高級GIS功能的企業(yè)級GIS應用與服務。 開發(fā)者使用ArcGIS

18、Server可以構建Web應用、Web服務、以及其它運行在標準的.NET和J2EE Web服務器上的企業(yè)應用。 ArcGIS Server包含兩個主要部分:GIS服務器和多種的開發(fā)框架。,ArcGIS Server提供的開發(fā)環(huán)境:,ArcGIS Server SDK for .NET and Java ArcGIS JavaScript API ArcGIS JavaScript extension for the Google Maps API ArcGIS JavaScript extension for Bing Maps ArcGIS API for Microsoft Silverl

19、ight/Windows Presentation Foundation (WPF) ArcGIS API for Flex ArcGIS Server Representational State Transfer (REST) API ArcGIS Server Simple Object Access Protocol (SOAP) SDK,1.4 Mobile GIS,ArcGIS技術可以部署到一系列的移動設備上,從輕量級的設備到PDA、筆記本電腦以及平板電腦。在野外工作中使用GIS,主要依靠將應用程序定制成簡單的移動工作任務以及對中心GIS Web服務器的無線訪問。,ArcGIS為用

20、戶提供了三種移動GIS解決方案。 ArcGIS Desktop和使用ArcGIS Engine建立的應用程序:這種方案常常部署在用于野外的筆記本電腦或者平板電腦上。 ArcPad:ArcPad為使用Windows CE兼容設備的野外工作人員提供了一個以GIS為中心的解決方案。 ArcGIS Mobile SDK:ArcGIS Server 包含的一個軟件開發(fā)包,可以被用于智能手機、PocketPC等設備上的應用開發(fā)。,2 ArcGIS Visual Studio IDE Integration Framework,為了提高軟件開發(fā)效率,ArcGIS開發(fā)包為開發(fā)人員提供了集成于VS環(huán)境的模板、向

21、導、命令、代碼段等。 ArcGIS開發(fā)包的安裝 ArcGIS桌面開發(fā)包ArcObjects(AO) ArcGIS Engine開發(fā)包- ArcGIS Engine(AE) ArcGIS Server開發(fā)包 ArcGIS開發(fā)包安裝后 VS IDE集成框架(開發(fā)環(huán)境元素) 開發(fā)類庫 開發(fā)文檔,ArcGIS Visual Studio IDE Integration Framework ArcGIS Visual Studio IDE Integration Framework for add-ins(New in ArcGIS 10) ArcGIS Visual Studio IDE Integr

22、ation Framework for extending ArcObjects ArcGIS Visual Studio IDE Integration Framework for server object extensions Web Mapping Application,2.1 ArcGIS Visual Studio IDE Integration Framework for add-ins,在VS環(huán)境下開發(fā): 創(chuàng)建解決方案(Solution) 一到多個項目(Projects) 一到多個類(Classes),2.2 ArcGIS Visual Studio IDE Integrat

23、ion Framework for extending ArcObjects,ArcGIS VS IDE 集成框架元素: ArcGIS Project templates (項目模板) ArcGIS Project wizard ArcGIS Item templates (類模板) ArcGIS Add Class wizard ArcGIS Snippets ArcGIS Reference dialog box ArcGIS Component Category Registrar dialog box ArcGIS License Initializer dialog box ArcG

24、IS Toolbox Reference dialog box ArcGIS .Net Code Converter Toolbox configuration,2.1 ArcGIS Project templates(項目模板),The following are the available project templates: Desktop: Windows Application Console Application Class Library (General) Class Library (ArcMap) Class Library (ArcCatalog) Class Libr

25、ary (ArcScene) Class Library (ArcGlobe) Engine: Windows Application Console Application Class Library (General) MapControl Application GlobeControl Application server object extensions REST SOAP Server Web Application Web Mapping Application,Toolbox configuration:Adds ArcGIS controls in the Visual S

26、tudio Toolbox window.,ArcGIS Project wizard(項目向導),當使用ArcGIS 項目模板來創(chuàng)建一個新項目時, ArcGIS 項目向導會自動打開,通過自動添加ArcGIS引用及許可初始化代碼,來幫助你高效地搭建新的ArcGIS 定制項目。,Class Library (ArcMap ),Windows Application (Desktop),Windows Application (Engine),2.3 ArcGIS item templates,Add-in 組件模板,類模板,ArcGIS Add Class (最通用的類模板) Wizard,當選

27、擇“ArcGIS Class”模板后,添加類向導會自動顯示,指導你完成類的創(chuàng)建。,ArcGIS Add Class Wizard include the following 3 steps: Base Implementation option Component Category option Optional Interfaces option,Base Implementation option Customization group Base component,Component Category option Categories Category properties,Optio

28、nal Interfaces option Available optional interfaces Selected interfaces,2.4 ArcGIS Reference dialog box,2.5 ArcGIS Component Category Registrar dialog box,2.6 ArcGIS License Initializer dialog box,不管是ArcGIS桌面應用程序還是獨立的GIS應用程序,在訪問ArcObjects 組件之前,需要明確地使用合適的ArcGIS 產品許可進行初始化。 開發(fā)人員可以使用“ArcGIS License Init

29、ializer dialog box”來產生并添加許可初始化代碼到項目中的適當位置。 但如果選用項目模板,創(chuàng)建過程中包含選擇合適的產品許可選項。,2.7 ArcGIS Toolbox Reference dialog box,This dialog box allows you to create a managed assembly for a custom ArcGIS toolbox, with one class representing each geoprocessing tool in the toolbox. You can then use these classes to

30、set up and run geoprocessing tools.,2.8 Snippets in ArcGIS for .NET developers,為了幫助ArcGIS軟件開發(fā)人員進一步提高軟件的開發(fā)效率,“ArcGIS Visual Studio IDE Integration Framework”提供了可重用的代碼段供開發(fā)人員使用。 ArcGIS 10 offers a fully integrated ArcGIS Snippet insertion and finder tool.,C:Program FilesMicrosoft Visual Studio 10.0VC#S

31、nippetsArcObjects VS- -工具- -代碼段管理器(T),使用代碼段,管理代碼段,編輯、重建、查找代碼段 ArcGIS Snippet Editor Manager ArcGIS Snippet Editor Wizard ArcGIS Snippet Finder,在VS中根據已有代碼生成Snippet,2.9 Walkthrough: Create a command by inheriting from BaseCommand,Create a simple command that zooms the extent of the selected layer Crea

32、te a new class library Add references Create a ZoomToLayer command Change the default icon bitmap Inherit the BaseCommand abstract class Add code to the overridden constructor of BaseCommand Add the ZoomToLayer functionality Expose the ZoomToLayer class to COM Compile the project Use the command in

33、ArcMap Debugging the command,Demo: Creating a command that zooms the extent of the selected layer Snippets,3 ArcObjects基礎,ArcObjects簡介 ArcObjects的組件庫 理解對象模型圖,3.1 ArcObjects簡介,ArcObjects是 ESRI公司ArcGIS系列產品的開發(fā)平臺,它是基于Microsoft COM技術所構建的GIS組件產品,是一套可重用的通用的二次開發(fā)組件產品,它可以用于大量開發(fā)框架中,包括流行的像 .NET 、Visual C+、Java等

34、開發(fā)環(huán)境。 ArcObjects不是為最終用戶而是專門為開發(fā)人員提供的二次開發(fā)組件。 ArcObjects是ArcGIS系列產品的基礎,大部分ArcGIS產品都是由ArcObjects構建的。,3.2 ArcObjects的組件庫,ArcObjects是一套龐大的COM組件集合,ArcGIS 各版本各種COM類型統(tǒng)計見下表:,為了更好地管理ArcObjects中數目眾多的COM對象,ESRI將它們放置在不同的組件庫中,對于.NET 來說,一個組件庫就是一個assembly(程序集),一個assembly有多個不同的命名空間。如ESRI.ArcGIS.ADF Assembly 的Namespac

35、es: ESRI.ArcGIS.ADF ESRI.ArcGIS.ADF.BaseClasses ESRI.ArcGIS.ADF.CATIDs ESRI.ArcGIS.ADF.COMSupport ESRI.ArcGIS.ADF.Resources,ArcObjects 10的組件庫共65個(65assemblies ),詳細內容參見Learning ArcObjects、ArcObjects SDK API Reference 如果不記得某個接口或對象屬于哪個命名空間的時候,可以通過開發(fā)幫助查找。,3.3 理解對象模型圖,ESRI提供了多種方法讓用戶了解ArcObjects組件及不同組件之間的

36、關系 ESRI提供的一系列OMD的PDF文件 開發(fā)幫助、API Reference VS.NET中的對象瀏覽器,通過閱讀ArcObjects的對象模型圖 (Object Model Diagram,OMD) ,可以快速了解ArcObjects的結構和不同組件之間的關系。 OMD使用UML(Unified Modeling Language,統(tǒng)一建模語言)描述,它補充了在對象瀏覽器中看不到的信息,可以幫助程序員了解類之間的關系,如何從一個類到另一個類,選擇正確的接口,獲取需要的屬性和方法等。,VS 中的對象瀏覽器,3.3.1 類與對象,在ArcObjects中存在三種類型的類: 抽象類(Abst

37、ract Class) 組件類(CoClass) 普通類(Class) 抽象類不能用于產生一個新的對象,但是可以用于定義一個子類。 組件類是一個可以直接用new創(chuàng)建對象實例的類,它的實例對象不依賴其他對象的存在而存在,其生存周期也不用其他的對象管理。 普通類不能夠直接產生一個對象,但它可以用其他的普通類或組件類的方法產生,而不是使用new關鍵字來完成。,3.3.2 類與類的關系,ArcObjects的類之間存在四種關系 依賴關系 關聯關系 組合關系 類型繼承,WorkspaceFactory,Workspace,MapControl,Map,Map,Layer,*,Curve,Segment,

38、Path,PolyCurve,4 組件對象模型,軟件開發(fā)歷史 什么是組件對象模型,4.1 軟件開發(fā)歷史,軟件重用和開發(fā)效率始終是軟件開發(fā)的核心問題。 在早期(面向過程語言),人們?yōu)榱酥赜茫瑢⒁恍┗镜臄祵W計算函數和界面設計函數設計成函數庫,讓其他軟件開發(fā)人員調用。它為應用開發(fā)者提供了方便,但是重用的粒度太小。 面向對象語言的出現,提高編程的粒度。面向對象語言的基本單位是類,它封裝了數據成員和函數成員 ,將最小組件的粒度提高了一個等級。但是,一個類提供了很多種方法和屬性,使用和管理很不方便。,COM技術(接口)的出現,解決了以上問題,將類的內部屬性和方法進行分類。例如在Map類中有好幾個接口,在

39、這些接口中定義不同功能組的方法和屬性,Map實現了這些接口,這樣就可以使用接口進行定義。但COM也存在一個嚴重的問題:DLL災難。 .NET 技術的出現解決了“DLL災難”問題。,4.2 什么是組件對象模型,組件技術標準 COM(DCOM):微軟的組件對象模型(Distributed) Component Object Model ) JavaBean:Sun公司的基于Java的組件技術 CORBA:對象管理組織(Object Management Group,OMG)的組件技術標準,公共對象請求代理結構(Common Object Request Broker Architecture,CO

40、RBA)。,COM知識要點,COM是一種二進制級別的組件通信標準-接口(Interface),它定義了組件之間應該如何通信、一個COM對象之間的不同接口如何查詢等。 COM對象也是基于面向對象標準的。COM對象可以以DLL或者EXE文件形式存在,它包含著接口的具體實現。使用者可以通過接口來訪問它內部的方法、屬性。 COM對象必須實現IUnknown接口,它負責管理COM對象生命周期并在運行時刻提供類型查詢,當COM對象不使用的時候,是這個接口定義的方法負責釋放內存。,QI (Query Interface),即所謂查詢接口 由于一個COM對象有很多個接口,不同的接口管理著COM的不同類型的方法

41、、屬性,因此從一個接口可以使用的屬性方法轉到另一個接口可以使用的屬性方法的過程稱為QI。這個過程也是由IUnknown接口管理的。 IMap pMap ; IActiveView pActiveView ; pMap = axMapControl1.Map; /獲取控件中的地圖 pActiveView = pMap as IActiveView; /QI (Or pActiveView = (IActiveView)pMap ; ) ,每個組件都有一個獨一無二的標識GUID。接口的GUID稱為IID,而組件類的GUID稱為CLSID。CLSID還有一個文本別名,即所謂的ProgID,它是一個由

42、項目名加組件類類名組成的字符串。 一個COM對象可以有多個接口,一個接口也可以被多個COM對象實現。 接口分為兩種,即內向接口和外向接口。 內向接口(Inbound Interface)是組織COM對象相關的方法和屬性,COM對象必須實現所有的接口內容; 外向接口(Outbound Interface)是用于組織COM對象相關的事件,開發(fā)人員根據需要實現事件接口。,接口可以從多個父接口繼承(C# 類呢) 接口繼承機制是非常有用的,在很多時候程序員可以將一個子接口類型的對象定義為父接口類型的對象,從而實現一般化的操作,如: Private void CreateGeometry (IPolygo

43、n pPolygon) Private void CreateGeometry (IGeometry pPolygon) COM對象的接口一旦被公布,就不能再修改,但可以增加新接口,在ArcObjects中有很多以“2”、“3”結尾的接口,都是這樣發(fā)展的產物。 COM組件必須被注冊后才能使用。,COM的缺陷:由于COM對象可以被重用,這樣多個程序可能共用一個COM對象,如果這個COM組件升級了,就很可能出現其中某個程序無法使用新組件,導致程序不能運行的情況,這種情況被稱為“DLL HELL”(DLL災難)。,5 .NET平臺概述,針對Windows平臺存在的缺陷,微軟提出了全新的.NET技術體

44、系,其主要包括 .NET Framework Visual Studio.NET,Visual Studio .NET 是一套完整的開發(fā)工具,用于生成各種類型的應用程序,包括 ASP Web 應用程序、XML Web services、桌面應用程序和移動應用程序。 .NET Framework 是生成、部署和運行 各種應用程序的平臺。 .NET Framework 具有兩個主要組成部分: 通用語言運行時(Common Language Runtime-CLR),是 .NET Framework 的基礎 .NET Framework 類庫。,.NET Framework體系結構,5.1 通用語言

45、運行時(CLR),通用語言運行時管理內存、線程執(zhí)行、代碼執(zhí)行、代碼安全驗證、編譯以及其他系統(tǒng)服務。 CLR處于.NET Framework的最底層,是.NET Framework的基礎,它為C#.NET、VB.NET、C+、J#等多種語言提供了統(tǒng)一的運行環(huán)境,使得用某種高級語言編寫的應用程序可以在不同的操作系統(tǒng)和硬件上運行,而不需要按照特定環(huán)境重寫應用程序。,.NET 環(huán)境下程序編譯執(zhí)行過程,Traditional Compilation:,Compilation and Execution in .NET,具體的運行過程: 使用VB、C# 或任一種CLR支持的編程語言編寫應用程序源代碼 由編

46、程語言對應的編譯器將源代碼翻譯成一個程序集(Assembly)- .NET組件,為一EXE或DLL文件。這個程序集包括中間語言MSIL代碼、元數據和一個文件清單。 MSIL代碼也簡稱IL代碼,其特點是獨立于特定操作系統(tǒng)和硬件平臺。 元數據詳細描述了MSIL代碼正確執(zhí)行所需的各種相關數據類型,包括描述Assembly的信息,描述類型的信息,描述其它屬性的信息等。這樣就使.NET應用程序代碼具備了自描述特性。 清單則列出了程序集中的所有文件和軟件組件,同時指出了CLR在哪里可以找到應用程序運行時需要的其它組件。,CLR加載IL代碼,同時收集有關應用程序的事實信息。 即時編譯器JIT將IL代碼動態(tài)編

47、譯成可執(zhí)行的本機代碼。不同的機器使用不同的JIT編譯器,所以同一個應用程序的MSIL代碼經不同機器的JIT編譯器編譯之后,便可以在不同的機器上執(zhí)行。,Single file assembly,Multi-file assembly,通用類型系統(tǒng),CLR借助通用類型系統(tǒng)(Common Type System,CTS)對代碼類型進行嚴格的安全檢查,避免了不同組件之間可能存在的類型不匹配的問題。,5.2 .NET Framework 類庫,.NET Framework類庫(FCL)是一套軟件組件,用于編寫在CLR控制下運行的代碼。類庫分級組成了一個龐大的功能集,包括顯示圖形用戶界面、讀寫XML數據、

48、在Internet上通信、訪問數據庫等多種功能。,5.3 .NET 的強命名程序集,以前在Windows下開發(fā)程序時常會遭遇“DLL Hell”問題,即動態(tài)鏈接庫的向后兼容問題。 微軟在.Net產生前,使用Guid來唯一的標識每一個COM組件,為了運行COM組件就必須在組冊表中對其進行注冊。多個應用程序可以共享相同的COM組件,當COM組件版本升級時,可能導致原來引用此COM組件的程序不能正確運行,等等。 在.Net中,微軟引入了一種新的解決方案:強命名程序集(Strong Name),以及與之配套的全局程序集緩存(GAC -Global Assembly Cache )來解決這個問題。,強命

49、名程序集:.Net使用Name、Version、Culture、PublicToken四個屬性來唯一標識一個程序集。 創(chuàng)建一個強命名程序集需要獲得一個用強命名實用工具(StrongNameUtility,即SN.exe)產生的密鑰。 全局程序集緩存(GAC): 如果一個Assembly要被多個應用程序訪問,那么它就必須放在一個CLR已確知的目錄下,并且CLR在探測到有對該Assembly的引用時,它必須能自動到該目錄下尋找這個程序集。這個已確知的目錄稱作GAC,就是全局程序集緩存。它一般位于下面的目錄下:C:WindowsAssembly 使用gacutil.exe命令可以將具有強命名的程序集

50、添加到全局程序集緩存。,命令行下看到的GAC,在開發(fā)一般的、非共享的程序時,不需要使用強命名的程序集,僅將項目(Project)編譯成.DLL或者.EXE即可。但是,如果開發(fā)的是組件庫、框架時,通過對程序集進行強命名,并將其部署到GAC中,可以保證程序集不會出現版本問題。,6 .NET組件與COM組件的互操作,本節(jié)內容:,COM包裝(COM Wrappers) ESRI提供的Primary Interop Assemblies 向COM公開.NET對象 COM到.NET的類型轉換,6.1 COM包裝(COM Wrappers),為了實現傳統(tǒng)的COM程序與.NET程序之間的相互調用,.NET提供

51、了兩個包裝類:運行時可調用包裝(runtime callable wrapper,RCW)和COM可調用包裝(COM callable wrapper,CCW)。每當一個.NET客戶程序調用一個COM對象的方法時就會創(chuàng)建一個RCW對象;相反,每當一個COM客戶程序調用一個.NET對象的方法時就會創(chuàng)建一個CCW對象。,6.2 ESRI提供的Primary Interop Assemblies,Primary interop assemblies(PIAs,主互操作程序集)是COM軟件廠商提供的為其COM組件在.NET環(huán)境下運行的互操作程序集,PIAs暴露COM組件中的所有類、接口和常量,作為 .

52、NET 托管類。 ESRI為所有的ArcObjects類型庫提供了PIAs,ArcGIS的.NET開發(fā)人員只能使用這些安裝在GAC (Global Assembly Cache,缺省安裝目錄為C:WINDOWSassembly)下的PIAs. 這些PIAs的公鑰標記(public key)為8FC3CC631E44AD86.,Controls PIAs,Strongly named assemblies provide an RCW for each Engine ActiveX control. RCW class inherits .NET Framework AxHost class.

53、Allows controls to be hosted on Windows forms,6.3 向COM公開.NET對象,Registering .NET Components with COM Registering .NET Classes in COM Component Categories,6.3.1 注冊.NET組件,使用定制的.NET組件來擴展ArcGIS應用程序,需要在COM注冊表中注冊.NET組件,并將.NET的程序集輸出為COM的類型庫(tlb),完成這一任務有兩條途徑: 一是使用.NET Framework提供的Regasm工具 二是使用Visual Studio.N

54、ET開發(fā)環(huán)境(Register for COM Interop)。 程序集注冊 (Regasm.exe) 的命令行工具用來注冊或注銷與 COM 一起使用的程序集。Regasm.exe 會將有關類的信息添加到系統(tǒng)注冊表中,以便 COM 客戶端透明地使用 .NET 類。例如: regasm EditTools.dll /tlb:EditTools.tlb /codebase,在Visual Studio.NET開發(fā)環(huán)境中,通過下列步驟來來自動完成.NET組件的注冊: 在“解決方案資源管理器”中,鼠標右鍵點擊要注冊的項目(即正在開發(fā)的.NET組件), 然后點擊“屬性”; 在項目“屬性頁”對話框中,點

55、擊“生成”,在右邊的窗格中,選中“為COM Interop注冊” ,點擊“確定”按鈕,即可完成.NET組件的自動注冊。,6.3.2 在COM組件類目中注冊.NET類,大量的ArcGIS擴展都依賴COM組件類目。事實上,大部分定制的ArcGIS組件類必須注冊到合適的COM組件類目中才能正常使用,例如,所有的ArcMap命令和工具必須注冊到“ESRI Mx Commands”組件類目中。 可以通過下列途徑將.Net 類注冊到COM組件類目中。 定制對話框 組件類目管理工具 ArcGIS Component Category Registrar 使用COM注冊函數(COMRegisterFuncti

56、on),定制對話框,在.NET環(huán)境下自定義的ArcGIS命令和工具可以通過ArcGIS的Customize對話框中的Add From File按鈕快速地添加到工具條中。 在這種情況下,只需要簡單地瀏覽一下TLB并打開它。ArcGIS框架會自動地將從類型庫中選中的類添加到合適的組件類目中。,組件類目管理工具,使用Component Catesories Manager(Categories.exe),瀏覽類型庫,并選擇合適的類目。,ArcGIS Component Category Registrar,This dialog box, as part of the ArcGIS Visual S

57、tudio integrated development environment (IDE) Integration Framework, allows you to register classes in the current project to ESRI component categories.,使用COM注冊函數(COMRegisterFunction),添加注冊代碼到.NET類中,這樣每當注冊.NET組件的時候,會在特定的組件類目中自動注冊.NET類。 .NET Framework類庫中包含兩個屬性類(ComRegisterFunction和ComUnregisterFunction),它們允許用戶指定方法注冊或注銷.NET類。 在組件類目內注冊一個組件類,需要程序員知道組件類目的唯一ID(CATID)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論