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)容存在侵權,請進行舉報或認領

文檔簡介

GIS應用開發(fā)DevelopingGISApplicationswithArcObjectsusingC#.NET江西省研究生優(yōu)質(zhì)課程主講:蘭小機GIS博士、教授

Email:landcom8835@163.com

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ā)科研項目國家自然科學基金項目--面向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)研究與開發(fā),10萬元,主持教學目標《GIS應用開發(fā)》課程是GIS本科生、研究生重要的專業(yè)課程,通過課程的學習,了解ArcGIS軟件體系結(jié)構(gòu)及ArcObjects組件構(gòu)成,并能熟練使用ArcObjects進行應用型GIS開發(fā);掌握應用型GIS開發(fā)的基本思路、技術方法.教學內(nèi)容及時間安排序號教學內(nèi)容學時1開發(fā)基礎

52ArcGISApplicationframework

53使用ArcObjects控件編程

64幾何形體對象--GEOMETRY

45地圖的組成

66空間數(shù)據(jù)的符號化

57空間數(shù)據(jù)管理

58地理處理框架29空間分析410空間數(shù)據(jù)編輯811三維GIS開發(fā)基礎6教材及參考材料教材:《基于ArcObjects與C#.NET的GIS應用開發(fā)》,蘭小機等編著,冶金工業(yè)出版社,2011年12月最新課件參考材料:ArcObjectsSDK10Microsoft.NETFramework//zh-cn/arcgisdesktop/10.0/help/ArcGIS開發(fā)工具包中的文檔,包括ArcGIS開發(fā)幫助、組件幫助、對象模型圖和示例學習基礎熟練掌握ArcGISDesktop(ArcMap、ArcCatalog)基本操作;了解Geodatabase、ArcSDE基本概念;會用C#進行程序設計。課程考核開發(fā)一個小型的GIS應用系統(tǒng),按GIS軟件工程的要求進行設計,并提供完整的設計開發(fā)方案,開發(fā)的小系統(tǒng)應具備GIS的基本功能,主要包括:打開、保存地圖文檔、添加數(shù)據(jù)自定義命令、工具、菜單空間數(shù)據(jù)符號化空間數(shù)據(jù)管理空間查詢與空間分析空間數(shù)據(jù)編輯功能:基本編輯功能、高級編輯功能計算機組件技術組件GIS組件式的GIS應用開發(fā)Chap.1FundamentalsofdevelopingwithArcObjectsArcGIS系列產(chǎn)品與開發(fā)方式ArcGISVisualStudioIDEIntegrationFrameworkArcObjects基礎組件對象模型.NET平臺概述.NET組件與COM組件的互操作ArcGIS開發(fā)資源§1

ArcGIS系列產(chǎn)品與開發(fā)方式ArcGISDesktopArcGISEngineArcGISServerArcGISMobile開發(fā)類型:

TocustomizeorextendtheArcGISDesktopapplicationsTo

buildstandalonemappingapplicationsTodevelopWebapplications

§1.1

ArcGISDesktop及其擴展ArcGISDesktop是GIS專業(yè)人員編輯、使用和管理地理信息的主要平臺,它按功能分為三個不同級別的產(chǎn)品:

ArcViewArcEditorArcInfo每個產(chǎn)品主要包括:ArcMap、ArcCatlog、ArcGlobe、ArcScene桌面應用程序.ArcGIS桌面應用程序定制/擴展方式使用ArcGIS桌面應用程序的定制功能(Customzie),配置應用程序界面;使用Python腳本,自動化GIS工作流開發(fā)插件(add-in),定制/擴展ArcGIS桌面應用程序開發(fā)定制組件,擴展ArcGIS桌面應用程序無需使用ArcObjects,后續(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ī)模大ArcGIS中的PythonPython是地理處理框架的重要組成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)、SpatialAnalyst模塊(arcpy.sa)和GeostatisticalAnalyst模塊(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腳本是可以執(zhí)行的.py文件。獨立Python腳本可通過兩種方式執(zhí)行:通過操作系統(tǒng)提示或開發(fā)應用程序(如PythonWin),或在Windows資源管理器中雙擊.py文件。Python腳本工具Python腳本工具是已添加到地理處理工具箱的Python腳本。添加為腳本工具后,便可以像使用其他地理處理工具一樣使用此腳本工具-可以從工具對話框打開和執(zhí)行、可以在Python窗口和ModelBuilder中使用,并可以從其他腳本和腳本工具中調(diào)用。Python窗口ArcGIS10使用Python窗口代替原來的命令行窗口,

通過Python窗口,用戶可以快捷地在ArcGIS內(nèi)部使用Python,從而以交互方式運行地理處理工具和功能以及充分利用其他Python模塊和庫。此窗口還為用戶學習Python提供了一個途徑。Python窗口提供了智能感知和代碼自動完成功能.可以直接從Catalog中拖放過來即時的幫助信息簡單實例:ArcGIS引入了后臺地理處理(Background

Geoprocessing)的概念,允許Geoprocessing工具、ArcGIS操作同時運行(使用多核CPU)?!?.1.2使用DLL組件擴展ArcGIS桌面使用DLL組件擴展ArcGIS桌面的優(yōu)勢:Theycanbeeasilydeliveredtoendusersviacustomsetupprograms.Youcanhideyourcodeandlogicinabinaryfile.YoucanextendandcustomizevirtuallyeveryaspectoftheArcGIStechnology.使用DLL組件擴展ArcGIS桌面開發(fā)插件(add-in),定制/擴展ArcGIS桌面應用程序(NewinArcGIS10)開發(fā)定制組件,擴展ArcGIS桌面應用程序ArcGISDesktopAdd-inAdd-in是一種能夠快速擴展桌面應用程序功能的全新擴展方式更加容易創(chuàng)建更加容易共享更加安全更易安裝管理ArcGIS

10Add-in所支持的類型按鈕和工具組合框菜單和右鍵菜單Multi-items工具條Toolpalettes可??看绑wApplicationextensionsEditorextensionsArcGIS

10Add-in支持的開發(fā)環(huán)境VisualStudio2008+.Net3.5VisualStudio2010+.Net3.5或者.Net4.0VisualBasic/C#

2008ExpressEdition+.Net3.5VisualBasic/C#2010ExpressEdition+.Net3.5或者.Net4.0EclipseIDEforJavaDevelopersXMLMetadata(

Config.esriaddinx)Add-in的部署復制/郵件發(fā)送編譯好的esriaddin文件到需要部署機器上(已經(jīng)安裝好ArcGIS桌面);在部署機器上雙擊esriaddin文件,彈出Add-in安裝界面,讓用戶查看該插件的一些元信息,然后讓用戶決定是否安裝該插件;安裝插件是不需要重啟任何ArcGISDesktop應用程序的。安裝完之后,就可以通過相應ArcGISDesktop應用程序的Add-inManager來查看已安裝的Add-in,也可以通過它來卸載。一些Add-in所包含的對象,例如Command、Tool、Toolbar,是需要用戶通過Customize窗口定制添加到界面上的。Extension對象,則需要用戶通過Extensions窗口勾選加載。Add-in共享與安全實現(xiàn)局域網(wǎng)內(nèi)共享設置共享目錄、設置安全級別Add-in數(shù)字簽名工具:ESRISignAddin.exeC:\ProgramFiles\CommonFiles\ArcGIS\bin\ESRISignAddIn.exe§1.2

ArcGIS

Engine

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

ArcGISServerArcGISServer是功能強大的基于服務器的GIS產(chǎn)品,用于構(gòu)建集中管理的、支持多用戶的、具備高級GIS功能的企業(yè)級GIS應用與服務。

開發(fā)者使用ArcGISServer可以構(gòu)建Web應用、Web服務、以及其它運行在標準的.NET和J2EEWeb服務器上的企業(yè)應用。

ArcGISServer包含兩個主要部分:GIS服務器和多種的開發(fā)框架。ArcGISServer提供的開發(fā)環(huán)境:ArcGISServerSDKfor.NETandJavaArcGISJavaScript

APIArcGISJavaScriptextensionfortheGoogleMapsAPIArcGISJavaScriptextensionforBingMapsArcGISAPIforMicrosoftSilverlight/WindowsPresentationFoundation(WPF)ArcGISAPIforFlexArcGISServerRepresentationalStateTransfer(REST)APIArcGISServerSimpleObjectAccessProtocol(SOAP)SDK§1.4

Mobile

GISArcGIS技術可以部署到一系列的移動設備上,從輕量級的設備到PDA、筆記本電腦以及平板電腦。在野外工作中使用GIS,主要依靠將應用程序定制成簡單的移動工作任務以及對中心GISWeb服務器的無線訪問。ArcGIS為用戶提供了三種移動GIS解決方案。ArcGISDesktop和使用ArcGISEngine建立的應用程序:這種方案常常部署在用于野外的筆記本電腦或者平板電腦上。ArcPad:ArcPad為使用WindowsCE兼容設備的野外工作人員提供了一個以GIS為中心的解決方案。ArcGISMobile

SDK:ArcGISServer包含的一個軟件開發(fā)包,可以被用于智能手機、PocketPC等設備上的應用開發(fā)?!?

ArcGISVisualStudioIDEIntegrationFramework為了提高軟件開發(fā)效率,ArcGIS開發(fā)包為開發(fā)人員提供了集成于VS環(huán)境的模板、向?qū)?、命令、代碼段等。ArcGIS開發(fā)包的安裝ArcGIS桌面開發(fā)包—ArcObjects(AO)ArcGISEngine開發(fā)包--ArcGISEngine(AE)ArcGISServer開發(fā)包ArcGIS開發(fā)包安裝后VS

IDE集成框架(開發(fā)環(huán)境元素)開發(fā)類庫開發(fā)文檔ArcGISVisualStudioIDEIntegrationFrameworkArcGISVisualStudioIDEIntegrationFrameworkforadd-ins(New

in

ArcGIS

10)ArcGISVisualStudioIDEIntegrationFrameworkforextendingArcObjectsArcGISVisualStudioIDEIntegrationFrameworkforserverobjectextensionsWeb

MappingApplication§2.1ArcGISVisualStudioIDEIntegrationFrameworkforadd-ins在VS環(huán)境下開發(fā):創(chuàng)建解決方案(Solution)一到多個項目(Projects)一到多個類(Classes)§2.2ArcGISVisualStudioIDEIntegrationFrameworkforextendingArcObjectsArcGISVS

IDE集成框架元素:ArcGISProjecttemplates(項目模板)ArcGISProjectwizardArcGISItemtemplates(類模板)ArcGISAddClasswizardArcGISSnippetsArcGISReferencedialogboxArcGISComponentCategoryRegistrardialogboxArcGISLicenseInitializerdialogboxArcGISToolboxReferencedialogboxArcGIS.NetCodeConverterToolboxconfiguration§2.1

ArcGISProjecttemplates(項目模板)Thefollowingaretheavailableprojecttemplates:Desktop:WindowsApplicationConsoleApplicationClassLibrary(General)ClassLibrary(ArcMap)ClassLibrary(ArcCatalog)ClassLibrary(ArcScene)ClassLibrary(ArcGlobe)Engine:WindowsApplicationConsoleApplicationClassLibrary(General)MapControlApplicationGlobeControlApplication

serverobjectextensionsRESTSOAPServerWebApplicationWebMappingApplicationToolboxconfiguration:AddsArcGIScontrolsintheVisualStudioToolboxwindow.ArcGISProjectwizard(項目向?qū)?當使用ArcGIS項目模板來創(chuàng)建一個新項目時,

ArcGIS項目向?qū)詣哟蜷_,通過自動添加ArcGIS引用及許可初始化代碼,來幫助你高效地搭建新的ArcGIS定制項目。Class

Library

(ArcMap

)Windows

Application

(Desktop)WindowsApplication(Engine)§2.3

ArcGISitemtemplatesAdd-in組件模板類模板ArcGISAddClass(最通用的類模板)

Wizard當選擇“ArcGIS

Class”模板后,添加類向?qū)詣语@示,指導你完成類的創(chuàng)建。ArcGISAddClassWizardincludethefollowing3steps:BaseImplementationoptionComponentCategoryoptionOptionalInterfacesoptionBaseImplementationoptionCustomizationgroupBasecomponentComponentCategoryoptionCategoriesCategorypropertiesOptionalInterfacesoptionAvailableoptionalinterfacesSelectedinterfaces§2.4

ArcGISReferencedialogbox§2.5

ArcGISComponentCategoryRegistrardialogbox§2.6ArcGISLicenseInitializerdialogbox不管是ArcGIS桌面應用程序還是獨立的GIS應用程序,在訪問ArcObjects組件之前,需要明確地使用合適的ArcGIS產(chǎn)品許可進行初始化。開發(fā)人員可以使用“ArcGISLicenseInitializerdialogbox

”來產(chǎn)生并添加許可初始化代碼到項目中的適當位置。但如果選用項目模板,創(chuàng)建過程中包含選擇合適的產(chǎn)品許可選項?!?.7ArcGISToolboxReferencedialogboxThisdialogboxallowsyoutocreateamanagedassemblyforacustomArcGIStoolbox,withoneclassrepresentingeachgeoprocessingtoolinthetoolbox.Youcanthenusetheseclassestosetupandrungeoprocessingtools.

§2.8

SnippetsinArcGISfor.NETdevelopers為了幫助ArcGIS軟件開發(fā)人員進一步提高軟件的開發(fā)效率,“ArcGISVisualStudioIDEIntegrationFramework”提供了可重用的代碼段供開發(fā)人員使用。ArcGIS10offersafullyintegratedArcGISSnippetinsertionandfindertool.C:\ProgramFiles\MicrosoftVisualStudio10.0\VC#\Snippets\ArcObjectsVS--工具--代碼段管理器(T)…使用代碼段管理代碼段編輯、重建、查找代碼段ArcGIS

Snippet

Editor

ManagerArcGIS

Snippet

Editor

WizardArcGIS

Snippet

Finder在VS中根據(jù)已有代碼生成Snippet§2.9

Walkthrough:CreateacommandbyinheritingfromBaseCommandCreateasimplecommandthatzoomstheextentoftheselectedlayerCreateanewclasslibraryAddreferencesCreateaZoomToLayercommandChangethedefaulticonbitmapInherittheBaseCommandabstractclassAddcodetotheoverriddenconstructorofBaseCommandAddtheZoomToLayerfunctionalityExposetheZoomToLayerclasstoCOMCompiletheprojectUsethecommandinArcMapDebuggingthecommandDemo:CreatingacommandthatzoomstheextentoftheselectedlayerSnippets§3

ArcObjects基礎ArcObjects簡介ArcObjects的組件庫理解對象模型圖§3.1ArcObjects簡介ArcObjects是ESRI公司ArcGIS系列產(chǎn)品的開發(fā)平臺,它是基于MicrosoftCOM技術所構(gòu)建的GIS組件產(chǎn)品,是一套可重用的通用的二次開發(fā)組件產(chǎn)品,它可以用于大量開發(fā)框架中,包括流行的像

.NET、VisualC++、Java等開發(fā)環(huán)境。ArcObjects不是為最終用戶而是專門為開發(fā)人員提供的二次開發(fā)組件。ArcObjects是ArcGIS系列產(chǎn)品的基礎,大部分ArcGIS產(chǎn)品都是由ArcObjects構(gòu)建的?!?.2

ArcObjects的組件庫ArcObjects是一套龐大的COM組件集合,ArcGIS各版本各種COM類型統(tǒng)計見下表:

EnumsStructsInterfacesClassesTotalArcGIS9.0

628

35

3029

2322

6014

ArcGIS9.1933

36

3918

3043

7930

ArcGIS9.21100

40

4798

3832

9770

ArcGIS9.3

1195

51

5206

4050

10502

ArcGIS10.01053935555408110782為了更好地管理ArcObjects中數(shù)目眾多的COM對象,ESRI將它們放置在不同的組件庫中,對于.NET來說,一個組件庫就是一個assembly(程序集),一個assembly有多個不同的命名空間。如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個(65

assemblies),詳細內(nèi)容參見LearningArcObjects、ArcObjects

SDK

API

Reference如果不記得某個接口或?qū)ο髮儆谀膫€命名空間的時候,可以通過開發(fā)幫助查找?!?.3

理解對象模型圖ESRI提供了多種方法讓用戶了解ArcObjects組件及不同組件之間的關系ESRI提供的一系列OMD的PDF文件開發(fā)幫助、API

ReferenceVS.NET中的對象瀏覽器通過閱讀ArcObjects的對象模型圖(ObjectModelDiagram,OMD),可以快速了解ArcObjects的結(jié)構(gòu)和不同組件之間的關系。OMD使用UML(UnifiedModelingLanguage,統(tǒng)一建模語言)描述,它補充了在對象瀏覽器中看不到的信息,可以幫助程序員了解類之間的關系,如何從一個類到另一個類,選擇正確的接口,獲取需要的屬性和方法等。VS中的對象瀏覽器§3.3.1類與對象在ArcObjects中存在三種類型的類:抽象類(AbstractClass)組件類(CoClass)普通類(Class)抽象類不能用于產(chǎn)生一個新的對象,但是可以用于定義一個子類。組件類是一個可以直接用new創(chuàng)建對象實例的類,它的實例對象不依賴其他對象的存在而存在,其生存周期也不用其他的對象管理。普通類不能夠直接產(chǎn)生一個對象,但它可以用其他的普通類或組件類的方法產(chǎn)生,而不是使用new關鍵字來完成?!?.3.2

類與類的關系ArcObjects的類之間存在四種關系依賴關系關聯(lián)關系組合關系類型繼承

WorkspaceFactoryWorkspaceMapControlMapMapLayer*CurveSegmentPathPolyCurve§4

組件對象模型軟件開發(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)部屬性和方法進行分類。例如在Map類中有好幾個接口,在這些接口中定義不同功能組的方法和屬性,Map實現(xiàn)了這些接口,這樣就可以使用接口進行定義。但COM也存在一個嚴重的問題:DLL災難。.NET技術的出現(xiàn)解決了“DLL災難”問題?!?.2

什么是組件對象模型組件技術標準COM(DCOM):微軟的組件對象模型((Distributed)ComponentObjectModel)JavaBean:Sun公司的基于Java的組件技術CORBA:對象管理組織(ObjectManagementGroup,OMG)的組件技術標準,公共對象請求代理結(jié)構(gòu)(CommonObjectRequestBrokerArchitecture,CORBA)。COM知識要點COM是一種二進制級別的組件通信標準--接口(Interface),它定義了組件之間應該如何通信、一個COM對象之間的不同接口如何查詢等。COM對象也是基于面向?qū)ο髽藴实摹OM對象可以以DLL或者EXE文件形式存在,它包含著接口的具體實現(xiàn)。使用者可以通過接口來訪問它內(nèi)部的方法、屬性。COM對象必須實現(xiàn)IUnknown接口,它負責管理COM對象生命周期并在運行時刻提供類型查詢,當COM對象不使用的時候,是這個接口定義的方法負責釋放內(nèi)存。

QI(QueryInterface),即所謂查詢接口由于一個COM對象有很多個接口,不同的接口管理著COM的不同類型的方法、屬性,因此從一個接口可以使用的屬性方法轉(zhuǎn)到另一個接口可以使用的屬性方法的過程稱為QI。這個過程也是由IUnknown接口管理的。

IMappMap;IActiveViewpActiveView; pMap=axMapControl1.Map;//獲取控件中的地圖

……

pActiveView=pMapasIActiveView;//QI(Or

pActiveView=(IActiveView)pMap;)

………每個組件都有一個獨一無二的標識GUID。接口的GUID稱為IID,而組件類的GUID稱為CLSID。CLSID還有一個文本別名,即所謂的ProgID,它是一個由項目名加組件類類名組成的字符串。一個COM對象可以有多個接口,一個接口也可以被多個COM對象實現(xiàn)。接口分為兩種,即內(nèi)向接口和外向接口。內(nèi)向接口(InboundInterface)是組織COM對象相關的方法和屬性,COM對象必須實現(xiàn)所有的接口內(nèi)容;外向接口(OutboundInterface)是用于組織COM對象相關的事件,開發(fā)人員根據(jù)需要實現(xiàn)事件接口。接口可以從多個父接口繼承(C#類呢)接口繼承機制是非常有用的,在很多時候程序員可以將一個子接口類型的對象定義為父接口類型的對象,從而實現(xiàn)一般化的操作,如:PrivatevoidCreateGeometry(IPolygonpPolygon)PrivatevoidCreateGeometry(IGeometrypPolygon)COM對象的接口一旦被公布,就不能再修改,但可以增加新接口,在ArcObjects中有很多以“2”、“3”結(jié)尾的接口,都是這樣發(fā)展的產(chǎn)物。COM組件必須被注冊后才能使用。COM的缺陷:由于COM對象可以被重用,這樣多個程序可能共用一個COM對象,如果這個COM組件升級了,就很可能出現(xiàn)其中某個程序無法使用新組件,導致程序不能運行的情況,這種情況被稱為“DLLHELL”(DLL災難)?!?.NET平臺概述針對Windows平臺存在的缺陷,微軟提出了全新的.NET技術體系,其主要包括

.NETFrameworkVisualStudio.NETVisualStudio.NET是一套完整的開發(fā)工具,用于生成各種類型的應用程序,包括ASPWeb應用程序、XMLWebservices、桌面應用程序和移動應用程序。.NETFramework是生成、部署和運行各種應用程序的平臺。.NETFramework具有兩個主要組成部分:通用語言運行時(CommonLanguageRuntime--CLR),是.NETFramework的基礎.NETFramework類庫。

.NETFramework體系結(jié)構(gòu)OperatingSystemCommonLanguageRuntime(CTS,JIT,MemoryManagement)BaseClassLibrary(System.IO,System.Drawing,System.Threading)DataClasses(ADO.NET,XML,SQL)WindowsFormsWebApplicationsWebServicesWebFormsASP.NETMobileCommonLanguageSpecificationVBC++C#J#…OperatingSystemCommonLanguageRuntime(CTS,JIT,MemoryManagement)BaseClassLibrary(System.IO,System.Drawing,System.Threading)DataClasses(ADO.NET,XML,SQL)WindowsFormsWebApplicationsWebServicesWebFormsASP.NETMobileVisualStudio.NET§5.1通用語言運行時(CLR)通用語言運行時管理內(nèi)存、線程執(zhí)行、代碼執(zhí)行、代碼安全驗證、編譯以及其他系統(tǒng)服務。CLR處于.NETFramework的最底層,是.NETFramework的基礎,它為C#.NET、VB.NET、C++、J#等多種語言提供了統(tǒng)一的運行環(huán)境,使得用某種高級語言編寫的應用程序可以在不同的操作系統(tǒng)和硬件上運行,而不需要按照特定環(huán)境重寫應用程序。

.NET環(huán)境下程序編譯執(zhí)行過程TraditionalCompilation:SourceCodeLanguageCompilerNativeEXEDLLCompilationExecutinginOSExecutionCompilationandExecutionin.NETSourcecodeCompilerVB.NETC++C#CompilerCompilerOperatingSystemServicesCommonLanguageRuntimeJITCompilerNativeCodeAssembliesManagedcodeILCode+MetadataILCode+MetadataILCode+MetadataUnmanagedComponentGarbageCollector具體的運行過程:使用VB、C#或任一種CLR支持的編程語言編寫應用程序源代碼由編程語言對應的編譯器將源代碼翻譯成一個程序集(Assembly)--.NET組件,為一EXE或DLL文件。這個程序集包括中間語言MSIL代碼、元數(shù)據(jù)和一個文件清單。MSIL代碼也簡稱IL代碼,其特點是獨立于特定操作系統(tǒng)和硬件平臺。元數(shù)據(jù)詳細描述了MSIL代碼正確執(zhí)行所需的各種相關數(shù)據(jù)類型,包括描述Assembly的信息,描述類型的信息,描述其它屬性的信息等。這樣就使.NET應用程序代碼具備了自描述特性。清單則列出了程序集中的所有文件和軟件組件,同時指出了CLR在哪里可以找到應用程序運行時需要的其它組件。CLR加載IL代碼,同時收集有關應用程序的事實信息。即時編譯器JIT將IL代碼動態(tài)編譯成可執(zhí)行的本機代碼。不同的機器使用不同的JIT編譯器,所以同一個應用程序的MSIL代碼經(jīng)不同機器的JIT編譯器編譯之后,便可以在不同的機器上執(zhí)行。SinglefileassemblyMulti-fileassembly通用類型系統(tǒng)CLR借助通用類型系統(tǒng)(CommonTypeSystem,CTS)對代碼類型進行嚴格的安全檢查,避免了不同組件之間可能存在的類型不匹配的問題?!?.2

.NETFramework類庫.NETFramework類庫(FCL)是一套軟件組件,用于編寫在CLR控制下運行的代碼。類庫分級組成了一個龐大

溫馨提示

  • 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

提交評論