ArcObjects GIS應用開發(fā)-基于C#chap.1課件_第1頁
ArcObjects GIS應用開發(fā)-基于C#chap.1課件_第2頁
ArcObjects GIS應用開發(fā)-基于C#chap.1課件_第3頁
ArcObjects GIS應用開發(fā)-基于C#chap.1課件_第4頁
ArcObjects GIS應用開發(fā)-基于C#chap.1課件_第5頁
已閱讀5頁,還剩149頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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

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

3、與開發(fā),10萬元,主持教學目標GIS應用開發(fā)課程是GIS本科生、研究生重要的專業(yè)課程,通過課程的學習,了解ArcGIS 軟件體系結構及ArcObjects組件構成,并能熟練使用ArcObjects 進行應用型GIS開發(fā); 掌握應用型GIS開發(fā)的基本思路、技術方法.教學內(nèi)容及時間安排序號教學內(nèi)容學時1開發(fā)基礎 52ArcGIS Application framework 53使用ArcObjects控件編程 64幾何形體對象-GEOMETRY 45地圖的組成 66空間數(shù)據(jù)的符號化 57空間數(shù)據(jù)管理 58地理處理框架29空間分析 410空間數(shù)據(jù)編輯811三維GIS開發(fā)基礎6學習基礎熟練掌握ArcG

4、IS Desktop(ArcMap、ArcCatalog)基本操作;了解Geodatabase、ArcSDE基本概念;會用C#進行程序設計。計算機組件技術組件GIS組件式的GIS應用開發(fā)Chap.1 Fundamentals of developing with ArcObjectsArcGIS 系列產(chǎn)品與開發(fā)方式ArcGIS Visual Studio IDE Integration Framework ArcObjects基礎組件對象模型.NET平臺概述.NET組件與COM組件的互操作ArcGIS開發(fā)資源1 ArcGIS 系列產(chǎn)品與開發(fā)方式ArcGIS Desktop ArcGIS Eng

5、ine ArcGIS Server ArcGIS Mobile 開發(fā)類型: To customize or extend the ArcGIS Desktop applicationsTobuild standalone mapping applicationsTo develop Web applicationsArcGIS桌面應用程序定制/擴展方式使用ArcGIS桌面應用程序的定制功能(Customzie),配置應用程序界面;使用Python 腳本,自動化GIS工作流開發(fā)插件( add-in),定制/擴展ArcGIS 桌面應用程序開發(fā)定制組件,擴展ArcGIS 桌面應用程序無需使用ArcO

6、bjects,后續(xù)版本不支持VBA定制需要使用ArcObjects,可以使用C#,VB.NET, Java, C+語言1.1.1 使用Python 腳本,自動化GIS工作流Python 是一種免費的、跨平臺的開源編程語言,它功能強大且簡單易學,因而得到了廣泛應用和支持。ESRI 已將 Python 完全納入 ArcGIS 中,成為了一種用于數(shù)據(jù)分析、數(shù)據(jù)轉(zhuǎn)換、數(shù)據(jù)管理和地圖自動化的語言,因而有助于提高工作效率。 易于學習,非常適合初學者,也特別適合專家使用可伸縮程度高,適于大型項目或小型的一次性程序(稱為腳本)可移植,跨平臺可嵌入(使 ArcGIS 可腳本化)穩(wěn)定成熟用戶社區(qū)規(guī)模大Python

7、是地理處理框架的重要組成Python在ArcGIS中的發(fā)展ArcPyArcPy -ArcGIS新的Python庫由arcgisscripting升級而來包含有函數(shù)(Function)、類(Class)和模塊(Module)功能實現(xiàn)能訪問所有gp工具數(shù)據(jù)轉(zhuǎn)換、數(shù)據(jù)管理數(shù)據(jù)分析自動化制圖ArcPy詳細參考: ArcGIS Desktop 10幫助專業(yè)庫地理處理ArcPy站點包ArcPy 模塊模塊為通常包含函數(shù)和類的 Python 文件。有一系列模塊支持 ArcPy,包括制圖模塊 (arcpy.mapping)、Spatial Analyst 模塊 (arcpy.sa) 和Geostatistica

8、l Analyst 模塊 (arcpy.ga)。ArcPy 類ArcPy 類,如 SpatialReference 和 Extent 類,通常用作地理處理工具參數(shù)設置的快捷方式,否則的話,這些參數(shù)會使用更加復雜的字符串。ArcPy 函數(shù)函數(shù)是用于執(zhí)行某項特定任務程序單元。 在 ArcPy 中,所有地理處理工具均以函數(shù)形式提供,但并非所有函數(shù)都是地理處理工具。除工具之外,ArcPy 還提供多種函數(shù)來更好地支持 Python 地理處理工作流。函數(shù)或方法可用于列出某些數(shù)據(jù)集、檢索數(shù)據(jù)集的屬性、在將表添加到地理數(shù)據(jù)庫之前驗證表名稱,或執(zhí)行其他許多有用的腳本任務。獨立的 Python 腳本Python

9、腳本是可以執(zhí)行的 .py 文件。獨立 Python 腳本可通過兩種方式執(zhí)行:通過操作系統(tǒng)提示或開發(fā)應用程序(如 PythonWin),或在 Windows 資源管理器中雙擊 .py 文件。Python 腳本工具Python 腳本工具是已添加到地理處理工具箱的 Python 腳本。添加為腳本工具后,便可以像使用其他地理處理工具一樣使用此腳本工具 - 可以從工具對話框打開和執(zhí)行、可以在 Python 窗口和 ModelBuilder 中使用,并可以從其他腳本和腳本工具中調(diào)用。簡單實例:ArcGIS引入了后臺地理處理(Background Geoprocessing)的概念,允許Geoprocess

10、ing工具、ArcGIS操作同時運行(使用多核CPU)。1.1.2 使用DLL組件擴展ArcGIS桌面使用DLL組件擴展ArcGIS桌面的優(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.ArcGIS Desktop Add-inAdd-in是一種能夠快

11、速擴展桌面應用程序功能的全新擴展方式更加容易創(chuàng)建更加容易共享更加安全更易安裝管理ArcGIS 10 Add-in所支持的類型按鈕和工具組合框菜單和右鍵菜單Multi-items工具條Tool palettes可停靠窗體Application extensionsEditor extensionsArcGIS 10 Add-in支持的開發(fā)環(huán)境Visual Studio 2008 + .Net3.5Visual Studio 2010 + .Net3.5或者.Net4.0Visual Basic/C# 2008 Express Edition + .Net3.5Visual Basic/C# 20

12、10 Express Edition +.Net3.5 或者.Net4.0Eclipse IDE for Java DevelopersXML Metadata( Config.esriaddinx )Add-in的部署復制/郵件發(fā)送編譯好的esriaddin文件到需要部署機器上(已經(jīng)安裝好ArcGIS 桌面);在部署機器上雙擊esriaddin文件,彈出Add-in安裝界面,讓用戶查看該插件的一些元信息,然后讓用戶決定是否安裝該插件;安裝插件是不需要重啟任何ArcGIS Desktop應用程序的。安裝完之后,就可以通過相應ArcGIS Desktop應用程序的Add-in Manager來查

13、看已安裝的Add-in,也可以通過它來卸載。一些Add-in所包含的對象,例如Command、Tool、Toolbar,是需要用戶通過Customize窗口定制添加到界面上的。Extension對象,則需要用戶通過Extensions窗口勾選加載。Add-in共享與安全實現(xiàn)局域網(wǎng)內(nèi)共享設置共享目錄、設置安全級別Add-in 數(shù)字簽名工具:ESRISignAddin.exeC:Program FilesCommon FilesArcGISbinESRISignAddIn.exe1.2 ArcGIS Engine ArcGIS Engine是一個完整的嵌入GIS組件庫和工具,開發(fā)人員可以用來創(chuàng)建新

14、的獨立的GIS應用程序或者在自定義的應用程序或已經(jīng)存在的應用程序中嵌入GIS功能。ArcGIS Engine是ArcObjects的子集,主要用于獨立的GIS應用開發(fā),它不依賴于ArcGIS Desktop。ArcGIS Engine由兩部分組成:一個軟件開發(fā)包(SDK)和一個可分發(fā)的運行時(Runtime)。除此之外,應用程序的功能可以使用可選的擴展模塊來進行擴展。ArcGIS Engine支持Windows平臺及跨平臺開發(fā)。Windows平臺開發(fā),有以下APIs: .NET VC+ 跨平臺開發(fā),有以下APIs:Java C+ for Windows C+ for Solaris/Linux

15、 使用ArcGIS Engine控件開發(fā)獨立的GIS應用Using the Winforms ArcGIS Engine controlsUsing ArcGIS Engine Controls in WPF (New in ArcGIS 10)1.3 ArcGIS ServerArcGIS Server 是功能強大的基于服務器的 GIS 產(chǎn)品,用于構建集中管理的、支持多用戶的、具備高級GIS功能的企業(yè)級GIS應用與服務。 開發(fā)者使用ArcGIS Server可以構建Web應用、Web服務、以及其它運行在標準的.NET和J2EE Web服務器上的企業(yè)應用。 ArcGIS Server包含兩個主

16、要部分:GIS服務器和多種的開發(fā)框架。ArcGIS Server提供的開發(fā)環(huán)境:ArcGIS Server SDK for .NET and JavaArcGIS JavaScript APIArcGIS JavaScript extension for the Google Maps APIArcGIS JavaScript extension for Bing MapsArcGIS API for Microsoft Silverlight/Windows Presentation Foundation (WPF)ArcGIS API for FlexArcGIS Server Repre

17、sentational State Transfer (REST) APIArcGIS Server Simple Object Access Protocol (SOAP) SDK 1.4 Mobile GISArcGIS技術可以部署到一系列的移動設備上,從輕量級的設備到PDA、筆記本電腦以及平板電腦。在野外工作中使用GIS,主要依靠將應用程序定制成簡單的移動工作任務以及對中心GIS Web服務器的無線訪問。ArcGIS為用戶提供了三種移動GIS解決方案。ArcGIS Desktop和使用ArcGIS Engine建立的應用程序:這種方案常常部署在用于野外的筆記本電腦或者平板電腦上。ArcP

18、ad: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)境的模板、向?qū)?、命令、代碼段等。ArcGIS開發(fā)包的安裝ArcGIS桌面開發(fā)包ArcObjects(AO)ArcGIS Engine開發(fā)包- ArcGIS Engine(AE)ArcGIS

19、Server開發(fā)包ArcGIS開發(fā)包安裝后VS IDE集成框架(開發(fā)環(huán)境元素)開發(fā)類庫開發(fā)文檔ArcGIS Visual Studio IDE Integration FrameworkArcGIS Visual Studio IDE Integration Framework for add-ins(New in ArcGIS 10)ArcGIS Visual Studio IDE Integration Framework for extending ArcObjectsArcGIS Visual Studio IDE Integration Framework for server ob

20、ject extensionsWeb Mapping Application2.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 Integration Framework for extending ArcObjectsArcGIS VS IDE 集成框架元素:ArcGIS Project templates (項目模板)ArcGIS Project wiz

21、ard ArcGIS Item templates (類模板)ArcGIS Add Class wizardArcGIS SnippetsArcGIS Reference dialog boxArcGIS Component Category Registrar dialog box ArcGIS License Initializer dialog box ArcGIS Toolbox Reference dialog box ArcGIS .Net Code Converter Toolbox configuration2.1 ArcGIS Project templates(項目模板)T

22、he following are the available project templates:Desktop: Windows Application Console Application Class Library (General) Class Library (ArcMap) Class Library (ArcCatalog) Class Library (ArcScene) Class Library (ArcGlobe) Engine: Windows Application Console Application Class Library (General) MapCon

23、trol Application GlobeControl Application server object extensions REST SOAPServer Web ApplicationWeb Mapping ApplicationToolbox configuration:Adds ArcGIS controls in the Visual Studio Toolbox window. ArcGIS Project wizard(項目向?qū)?當使用ArcGIS 項目模板來創(chuàng)建一個新項目時, ArcGIS 項目向?qū)詣哟蜷_,通過自動添加ArcGIS引用及許可初始化代碼,來幫助你高效地

24、搭建新的ArcGIS 定制項目。Class Library (ArcMap )Windows Application (Desktop)Windows Application (Engine)2.3 ArcGIS item templates Add-in 組件模板類模板ArcGIS Add Class (最通用的類模板) Wizard當選擇“ArcGIS Class”模板后,添加類向?qū)詣语@示,指導你完成類的創(chuàng)建。ArcGIS Add Class Wizard include the following 3 steps:Base Implementation option Componen

25、t Category option Optional Interfaces option Base Implementation option Customization group Base component Component Category option Categories Category properties Optional Interfaces option Available optional interfaces Selected interfaces 2.4 ArcGIS Reference dialog box 2.5 ArcGIS Component Catego

26、ry Registrar dialog box 2.6 ArcGIS License Initializer dialog box不管是ArcGIS桌面應用程序還是獨立的GIS應用程序,在訪問ArcObjects 組件之前,需要明確地使用合適的ArcGIS 產(chǎn)品許可進行初始化。開發(fā)人員可以使用“ArcGIS License Initializer dialog box”來產(chǎn)生并添加許可初始化代碼到項目中的適當位置。但如果選用項目模板,創(chuàng)建過程中包含選擇合適的產(chǎn)品許可選項。2.7 ArcGIS Toolbox Reference dialog box This dialog box allows

27、 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 set up and run geoprocessing tools. 2.8 Snippets in ArcGIS for .NET developers為了幫助ArcGIS軟件開發(fā)人員進一步提高軟件的開發(fā)效率,“ArcGIS Visual Studio IDE In

28、tegration Framework”提供了可重用的代碼段供開發(fā)人員使用。ArcGIS 10 offers a fully integrated ArcGIS Snippet insertion and finder tool. C:Program FilesMicrosoft Visual Studio 10.0VC#SnippetsArcObjects VS- -工具- -代碼段管理器(T)使用代碼段管理代碼段編輯、重建、查找代碼段ArcGIS Snippet Editor ManagerArcGIS Snippet Editor WizardArcGIS Snippet Finder在

29、VS中根據(jù)已有代碼生成Snippet2.9 Walkthrough: Create a command by inheriting from BaseCommandCreate a simple command that zooms the extent of the selected layer Create a new class library Add references Create a ZoomToLayer command Change the default icon bitmap Inherit the BaseCommand abstract class Add code

30、to the overridden constructor of BaseCommand Add the ZoomToLayer functionality Expose the ZoomToLayer class to COM Compile the project Use the command in ArcMap Debugging the command Demo:Creating a command that zooms the extent of the selected layerSnippets3 ArcObjects基礎ArcObjects簡介ArcObjects的組件庫理解

31、對象模型圖3.1 ArcObjects簡介ArcObjects是 ESRI公司ArcGIS系列產(chǎn)品的開發(fā)平臺,它是基于Microsoft COM技術所構建的GIS組件產(chǎn)品,是一套可重用的通用的二次開發(fā)組件產(chǎn)品,它可以用于大量開發(fā)框架中,包括流行的像 .NET 、Visual C+、Java等開發(fā)環(huán)境。ArcObjects不是為最終用戶而是專門為開發(fā)人員提供的二次開發(fā)組件。ArcObjects是ArcGIS系列產(chǎn)品的基礎,大部分ArcGIS產(chǎn)品都是由ArcObjects構建的。3.2 ArcObjects的組件庫ArcObjects是一套龐大的COM組件集合,ArcGIS 各版本各種COM類型統(tǒng)

32、計見下表: Enums Structs Interfaces Classes Total ArcGIS 9.0 628 35 3029 2322 6014 ArcGIS 9.1 933 36 3918 3043 7930 ArcGIS 9.2 1100 40 4798 3832 9770 ArcGIS 9.3 1195 51 5206 4050 10502 ArcGIS 10.01053935555408110782為了更好地管理ArcObjects中數(shù)目眾多的COM對象,ESRI將它們放置在不同的組件庫中,對于.NET 來說,一個組件庫就是一個assembly(程序集),一個assembly

33、有多個不同的命名空間。如ESRI.ArcGIS.ADF Assembly 的Namespaces:ESRI.ArcGIS.ADF ESRI.ArcGIS.ADF.BaseClasses ESRI.ArcGIS.ADF.CATIDs ESRI.ArcGIS.ADF.COMSupport ESRI.ArcGIS.ADF.Resources ArcObjects 10的組件庫共65個(65assemblies ),詳細內(nèi)容參見Learning ArcObjects、ArcObjects SDK API Reference如果不記得某個接口或?qū)ο髮儆谀膫€命名空間的時候,可以通過開發(fā)幫助查找。 3.3

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

35、 類與對象在ArcObjects中存在三種類型的類:抽象類(Abstract Class)組件類(CoClass)普通類(Class)抽象類不能用于產(chǎn)生一個新的對象,但是可以用于定義一個子類。組件類是一個可以直接用new創(chuàng)建對象實例的類,它的實例對象不依賴其他對象的存在而存在,其生存周期也不用其他的對象管理。普通類不能夠直接產(chǎn)生一個對象,但它可以用其他的普通類或組件類的方法產(chǎn)生,而不是使用new關鍵字來完成。 3.3.2 類與類的關系ArcObjects的類之間存在四種關系依賴關系關聯(lián)關系組合關系類型繼承 WorkspaceFactory WorkspaceMapControl MapMapL

36、ayer*CurveSegment PathPolyCurve4 組件對象模型 軟件開發(fā)歷史什么是組件對象模型4.1 軟件開發(fā)歷史軟件重用和開發(fā)效率始終是軟件開發(fā)的核心問題。 在早期(面向過程語言),人們?yōu)榱酥赜?,將一些基本的?shù)學計算函數(shù)和界面設計函數(shù)設計成函數(shù)庫,讓其他軟件開發(fā)人員調(diào)用。它為應用開發(fā)者提供了方便,但是重用的粒度太小。面向?qū)ο笳Z言的出現(xiàn),提高編程的粒度。面向?qū)ο笳Z言的基本單位是類,它封裝了數(shù)據(jù)成員和函數(shù)成員 ,將最小組件的粒度提高了一個等級。但是,一個類提供了很多種方法和屬性,使用和管理很不方便。COM技術(接口)的出現(xiàn),解決了以上問題,將類的內(nèi)部屬性和方法進行分類。例如在Ma

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

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

39、、屬性,因此從一個接口可以使用的屬性方法轉(zhuǎn)到另一個接口可以使用的屬性方法的過程稱為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,它是一個由項目名

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

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

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

43、ge Runtime(CTS, JIT, Memory Management)Base Class Library(System.IO, System.Drawing,System.Threading)Data Classes(ADO.NET, XML, SQL)Windows FormsWeb Applications Web ServicesWeb Forms ASP .NET MobileCommon Language SpecificationVBC+C#J#Operating SystemCommon Language Runtime(CTS, JIT, Memory Managem

44、ent)Base Class Library(System.IO, System.Drawing,System.Threading)Data Classes(ADO.NET, XML, SQL)Windows FormsWeb Applications Web ServicesWeb Forms ASP .NET MobileVisual Studio .NET5.1 通用語言運行時(CLR)通用語言運行時管理內(nèi)存、線程執(zhí)行、代碼執(zhí)行、代碼安全驗證、編譯以及其他系統(tǒng)服務。CLR處于.NET Framework的最底層,是.NET Framework的基礎,它為C#.NET、VB.NET、C+、

45、J#等多種語言提供了統(tǒng)一的運行環(huán)境,使得用某種高級語言編寫的應用程序可以在不同的操作系統(tǒng)和硬件上運行,而不需要按照特定環(huán)境重寫應用程序。 .NET 環(huán)境下程序編譯執(zhí)行過程 Traditional Compilation:Source CodeLanguage CompilerNative EXE DLLCompilationExecuting in OSExecutionCompilation and Execution in .NETSource codeCompilerVB.NETC+C#CompilerCompilerOperating System ServicesCommon Lan

46、guage RuntimeJIT CompilerNative CodeAssembliesManaged codeIL Code+MetadataIL Code+MetadataIL Code+MetadataUnmanagedComponentGarbage Collector具體的運行過程:使用VB、C# 或任一種CLR支持的編程語言編寫應用程序源代碼由編程語言對應的編譯器將源代碼翻譯成一個程序集(Assembly)- .NET組件,為一EXE或DLL文件。這個程序集包括中間語言MSIL代碼、元數(shù)據(jù)和一個文件清單。MSIL代碼也簡稱IL代碼,其特點是獨立于特定操作系統(tǒng)和硬件平臺。元數(shù)據(jù)詳

47、細描述了MSIL代碼正確執(zhí)行所需的各種相關數(shù)據(jù)類型,包括描述Assembly的信息,描述類型的信息,描述其它屬性的信息等。這樣就使.NET應用程序代碼具備了自描述特性。清單則列出了程序集中的所有文件和軟件組件,同時指出了CLR在哪里可以找到應用程序運行時需要的其它組件。CLR加載IL代碼,同時收集有關應用程序的事實信息。即時編譯器JIT將IL代碼動態(tài)編譯成可執(zhí)行的本機代碼。不同的機器使用不同的JIT編譯器,所以同一個應用程序的MSIL代碼經(jīng)不同機器的JIT編譯器編譯之后,便可以在不同的機器上執(zhí)行。Single file assemblyMulti-file assembly通用類型系統(tǒng)CLR借

48、助通用類型系統(tǒng)(Common Type System,CTS)對代碼類型進行嚴格的安全檢查,避免了不同組件之間可能存在的類型不匹配的問題。5.2 .NET Framework 類庫.NET Framework類庫(FCL)是一套軟件組件,用于編寫在CLR控制下運行的代碼。類庫分級組成了一個龐大的功能集,包括顯示圖形用戶界面、讀寫XML數(shù)據(jù)、在Internet上通信、訪問數(shù)據(jù)庫等多種功能。Same classes forall languages!5.3 .NET 的強命名程序集以前在Windows下開發(fā)程序時常會遭遇“DLL Hell”問題,即動態(tài)鏈接庫的向后兼容問題。微軟在.Net產(chǎn)生前,使

49、用Guid來唯一的標識每一個COM組件,為了運行COM組件就必須在組冊表中對其進行注冊。多個應用程序可以共享相同的COM組件,當COM組件版本升級時,可能導致原來引用此COM組件的程序不能正確運行,等等。在.Net中,微軟引入了一種新的解決方案:強命名程序集(Strong Name),以及與之配套的全局程序集緩存(GAC -Global Assembly Cache )來解決這個問題。強命名程序集:.Net使用Name、Version、Culture、PublicToken四個屬性來唯一標識一個程序集。創(chuàng)建一個強命名程序集需要獲得一個用強命名實用工具(StrongNameUtility,即SN

50、.exe)產(chǎn)生的密鑰。全局程序集緩存(GAC): 如果一個Assembly要被多個應用程序訪問,那么它就必須放在一個CLR已確知的目錄下,并且CLR在探測到有對該Assembly的引用時,它必須能自動到該目錄下尋找這個程序集。這個已確知的目錄稱作GAC,就是全局程序集緩存。它一般位于下面的目錄下:C:WindowsAssembly 使用gacutil.exe命令可以將具有強命名的程序集添加到全局程序集緩存。命令行下看到的GAC在開發(fā)一般的、非共享的程序時,不需要使用強命名的程序集,僅將項目(Project)編譯成.DLL或者.EXE即可。但是,如果開發(fā)的是組件庫、框架時,通過對程序集進行強命名

51、,并將其部署到GAC中,可以保證程序集不會出現(xiàn)版本問題。6 .NET組件與COM組件的互操作COM Model.NET Model Type libraries MetadataDLLAssembliesInterface basedObject basedGUIDsStrong namesQueryInterface CastReference countingMemory management(Garbage collection)RegistryGlobal Assembly Cache (gacutil.exe可以將具有強命名的程序集添至全局程序集緩存)本節(jié)內(nèi)容:COM包裝(COM W

52、rappers)ESRI提供的Primary Interop Assemblies 向COM公開.NET對象COM到.NET的類型轉(zhuǎn)換6.1 COM包裝(COM Wrappers)為了實現(xiàn)傳統(tǒng)的COM程序與.NET程序之間的相互調(diào)用,.NET提供了兩個包裝類:運行時可調(diào)用包裝(runtime callable wrapper,RCW)和COM可調(diào)用包裝(COM callable wrapper,CCW)。每當一個.NET客戶程序調(diào)用一個COM對象的方法時就會創(chuàng)建一個RCW對象;相反,每當一個COM客戶程序調(diào)用一個.NET對象的方法時就會創(chuàng)建一個CCW對象。6.2 ESRI提供的Primary

53、Interop Assemblies Primary interop assemblies(PIAs,主互操作程序集)是COM軟件廠商提供的為其COM組件在.NET環(huán)境下運行的互操作程序集,PIAs暴露COM組件中的所有類、接口和常量,作為 .NET 托管類。ESRI為所有的ArcObjects類型庫提供了PIAs,ArcGIS的.NET開發(fā)人員只能使用這些安裝在GAC (Global Assembly Cache,缺省安裝目錄為C:WINDOWSassembly)下的PIAs. 這些PIAs的公鑰標記(public key)為8FC3CC631E44AD86.Controls PIAsStr

54、ongly named assemblies provide an RCW for each Engine ActiveX control. RCW class inherits .NET Framework AxHost class. Allows controls to be hosted on Windows forms6.3 向COM公開.NET對象Registering .NET Components with COMRegistering .NET Classes in COM Component Categories6.3.1 注冊.NET組件使用定制的.NET組件來擴展ArcG

55、IS應用程序,需要在COM注冊表中注冊.NET組件,并將.NET的程序集輸出為COM的類型庫(tlb),完成這一任務有兩條途徑:一是使用.NET Framework提供的Regasm工具二是使用Visual Studio.NET開發(fā)環(huán)境(Register for COM Interop)。程序集注冊 (Regasm.exe) 的命令行工具用來注冊或注銷與 COM 一起使用的程序集。Regasm.exe 會將有關類的信息添加到系統(tǒng)注冊表中,以便 COM 客戶端透明地使用 .NET 類。例如:regasm EditTools.dll /tlb:EditTools.tlb /codebase在Vis

56、ual Studio.NET開發(fā)環(huán)境中,通過下列步驟來來自動完成.NET組件的注冊:在“解決方案資源管理器”中,鼠標右鍵點擊要注冊的項目(即正在開發(fā)的.NET組件), 然后點擊“屬性”;在項目“屬性頁”對話框中,點擊“生成”,在右邊的窗格中,選中“為COM Interop注冊” ,點擊“確定”按鈕,即可完成.NET組件的自動注冊。6.3.2 在COM組件類目中注冊.NET類大量的ArcGIS擴展都依賴COM組件類目。事實上,大部分定制的ArcGIS組件類必須注冊到合適的COM組件類目中才能正常使用,例如,所有的ArcMap命令和工具必須注冊到“ESRI Mx Commands”組件類目中。 可

57、以通過下列途徑將.Net 類注冊到COM組件類目中。定制對話框組件類目管理工具ArcGIS Component Category Registrar使用COM注冊函數(shù)(COMRegisterFunction)定制對話框在.NET環(huán)境下自定義的ArcGIS命令和工具可以通過ArcGIS的Customize對話框中的Add From File按鈕快速地添加到工具條中。在這種情況下,只需要簡單地瀏覽一下TLB并打開它。ArcGIS框架會自動地將從類型庫中選中的類添加到合適的組件類目中。組件類目管理工具使用Component Catesories Manager(Categories.exe),瀏覽類

58、型庫,并選擇合適的類目。 ArcGIS Component Category RegistrarThis dialog box, as part of the ArcGIS Visual Studio integrated development environment (IDE) Integration Framework, allows you to register classes in the current project to ESRI component categories. 使用COM注冊函數(shù)(COMRegisterFunction)添加注冊代碼到.NET類中,這樣每當注冊.NET組件的時候,會在特定的組件類目中自動注冊.NET類。.NET Framework類庫中包含兩個屬性類(ComRegisterFunction和ComUnregisterFunction),它們允許用戶指定方法注冊或注銷.NET類。 在組件類目內(nèi)注

溫馨提示

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

評論

0/150

提交評論