版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、GIS 应 用 开 发 Developing GIS Applications with ArcObjects using C#.NET 江西省研究生优质课程 主讲:兰小机 GIS博士、教授 Email : QQ :305333315 课件: 4/,兰小机简历,主要经历 1988年7月毕业于南方冶金学院工程测量专业,获学士学位,并留校任教 1994年6月毕业于武汉测绘科技大学工程测量专业,获硕士学位,回校任教 2005年6月毕业于南京师范大学地图学与地理信息系统专业,获理学博士学位,回校任教 主要研究方向 GML空间数据挖掘 GML空间数据库理论与GMLGIS
2、 空间数据集成与共享 GIS应用开发,科研项目,国家自然科学基金项目-面向GML的时空关联规则及序列模式挖掘研究(编号:40971234) ,35万元,主持 国家自然科学基金项目-本原GML空间数据库理论及GMLGIS与传统GIS集成研究(编号:40761017) ,16万元,主持 国家自然科学基金项目 - GML空间数据存储索引机制研究(编号:40401045) ,26万元,排名第二 地理信息科学江苏省重点实验室开发基金项目 -面向对象的GML空间数据库及其应用研究(编号:JK20050302) ,5万元主持 江西省教育厅科技项目GML空间数据库理论及GMLGIS研究,1万元,主持 萍乡市基
3、础地理信息系统研究与开发,22万元,主持 城市公众地理信息服务系统研究与开发,10万元,主持,教学目标,GIS应用开发课程是GIS本科生、研究生重要的专业课程,通过课程的学习,了解ArcGIS 软件体系结构及ArcObjects组件构成,并能熟练使用ArcObjects 进行应用型GIS开发; 掌握应用型GIS开发的基本思路、技术方法.,教学内容及时间安排,教材及参考材料,教材: 基于ArcObjects与C#.NET的GIS应用开发,兰小机等编著,冶金工业出版社,2011年12月 最新课件 参考材料: ArcObjects SDK 10 Microsoft .NET Framework Ar
4、cGIS 开发工具包中的文档,包括ArcGIS开发帮助、组件帮助、对象模型图和示例,学习基础,熟练掌握ArcGIS Desktop(ArcMap、ArcCatalog)基本操作; 了解Geodatabase、ArcSDE基本概念; 会用C#进行程序设计。,课程考核,开发一个小型的GIS应用系统,按GIS软件工程的要求进行设计,并提供完整的设计开发方案,开发的小系统应具备GIS的基本功能,主要包括: 打开、保存地图文档、添加数据 自定义命令、工具、菜单 空间数据符号化 空间数据管理 空间查询与空间分析 空间数据编辑功能:基本编辑功能、高级编辑功能,计算机组件技术,组件GIS,组件式的GIS应用开
5、发,Chap.1 Fundamentals of developing with ArcObjects,ArcGIS 系列产品与开发方式 ArcGIS Visual Studio IDE Integration Framework ArcObjects基础 组件对象模型 .NET平台概述 .NET组件与COM组件的互操作 ArcGIS开发资源,1 ArcGIS 系列产品与开发方式,ArcGIS Desktop ArcGIS Engine ArcGIS Server ArcGIS Mobile,开发类型: 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专业人员编辑、使用和管理地理信息的主要平台,它按功能分为三个不同级别的产品: ArcView ArcEditor ArcInfo 每个产品主要包括:ArcMap、ArcCatlog、ArcGlobe、ArcScene桌面应用程序.,ArcGIS桌面应用程序定制/扩展方式 使用ArcGIS桌面应用程序的定制功能(Customzie),配置应用程序界面; 使用Py
7、thon 脚本,自动化GIS工作流 开发插件( add-in),定制/扩展ArcGIS 桌面应用程序 开发定制组件,扩展ArcGIS 桌面应用程序,1.1.1 使用Python 脚本,自动化GIS工作流,Python 是一种免费的、跨平台的开源编程语言,它功能强大且简单易学,因而得到了广泛应用和支持。 ESRI 已将 Python 完全纳入 ArcGIS 中,成为了一种用于数据分析、数据转换、数据管理和地图自动化的语言,因而有助于提高工作效率。 易于学习,非常适合初学者,也特别适合专家使用 可伸缩程度高,适于大型项目或小型的一次性程序(称为脚本) 可移植,跨平台 可嵌入(使 ArcGIS 可脚
8、本化) 稳定成熟 用户社区规模大,ArcGIS中的Python,Python是地理处理框架的重要组成,Python在ArcGIS中的发展,ArcPy,ArcPy -ArcGIS新的Python库 由arcgisscripting升级而来 包含有函数(Function)、类(Class)和模块(Module) 功能实现 能访问所有gp工具 数据转换、数据管理 数据分析 自动化制图,ArcPy详细参考: ArcGIS Desktop 10帮助专业库地理处理ArcPy站点包,ArcPy 模块 模块为通常包含函数和类的 Python 文件。有一系列模块支持 ArcPy,包括制图模块 (arcpy.ma
9、pping)、Spatial Analyst 模块 (arcpy.sa) 和Geostatistical Analyst 模块 (arcpy.ga)。 ArcPy 类 ArcPy 类,如 SpatialReference 和 Extent 类,通常用作地理处理工具参数设置的快捷方式,否则的话,这些参数会使用更加复杂的字符串。,ArcPy 函数 函数是用于执行某项特定任务程序单元。 在 ArcPy 中,所有地理处理工具均以函数形式提供,但并非所有函数都是地理处理工具。除工具之外,ArcPy 还提供多种函数来更好地支持 Python 地理处理工作流。函数或方法可用于列出某些数据集、检索数据集的属性
10、、在将表添加到地理数据库之前验证表名称,或执行其他许多有用的脚本任务。,独立的 Python 脚本 Python 脚本是可以执行的 .py 文件。独立 Python 脚本可通过两种方式执行:通过操作系统提示或开发应用程序(如 PythonWin),或在 Windows 资源管理器中双击 .py 文件。 Python 脚本工具 Python 脚本工具是已添加到地理处理工具箱的 Python 脚本。添加为脚本工具后,便可以像使用其他地理处理工具一样使用此脚本工具 - 可以从工具对话框打开和执行、可以在 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桌面的优势: 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桌面 开发插件( add-in),定制/扩展ArcGIS 桌面应用程序(New in ArcGIS 10) 开发定制组件,扩展ArcGIS 桌面应用程序,A
13、rcGIS Desktop Add-in,Add-in是一种能够快速扩展桌面应用程序功能的全新扩展方式 更加容易创建 更加容易共享 更加安全 更易安装管理,ArcGIS 10 Add-in所支持的类型 按钮和工具 组合框 菜单和右键菜单 Multi-items 工具条 Tool palettes 可停靠窗体 Application extensions Editor extensions,ArcGIS 10 Add-in支持的开发环境 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的部署 复制/邮件发送编译好的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组件库和工具,开发人员可以用来创建新的独立的GIS应用程序或者在自定义的应用程序或已经存在的应用程序中嵌入GIS功能。 ArcGIS Engine是ArcObjects的子集,主要用于独立的GIS应用开发,它不依赖于ArcGIS Desktop。 ArcGIS Engine由两部分组成:一个软件开发包(SDK)和一个可分发的运行时(Runtime)。除此之外,应用程序的功能可以使用可选的扩展模块来进行扩展。,ArcGIS Engine支持Windows平台及跨平台开发。 Windows平台开发,有以下
17、APIs: .NET VC+ 跨平台开发,有以下APIs: Java C+ for Windows C+ for Solaris/Linux,使用ArcGIS Engine控件开发独立的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功能的企业级GIS应用与服务。 开发者使用ArcGIS
18、Server可以构建Web应用、Web服务、以及其它运行在标准的.NET和J2EE Web服务器上的企业应用。 ArcGIS Server包含两个主要部分:GIS服务器和多种的开发框架。,ArcGIS Server提供的开发环境:,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 包含的一个软件开发包,可以被用于智能手机、PocketPC等设备上的应用开发。,2 ArcGIS Visual Studio IDE Integration Framework,为了提高软件开发效率,ArcGIS开发包为开发人员提供了集成于VS环境的模板、向
21、导、命令、代码段等。 ArcGIS开发包的安装 ArcGIS桌面开发包ArcObjects(AO) ArcGIS Engine开发包- ArcGIS Engine(AE) ArcGIS Server开发包 ArcGIS开发包安装后 VS IDE集成框架(开发环境元素) 开发类库 开发文档,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环境下开发: 创建解决方案(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 项目模板来创建一个新项目时, 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”模板后,添加类向导会自动显示,指导你完成类的创建。,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 产品许可进行初始化。 开发人员可以使用“ArcGIS License Init
29、ializer dialog box”来产生并添加许可初始化代码到项目中的适当位置。 但如果选用项目模板,创建过程中包含选择合适的产品许可选项。,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软件开发人员进一步提高软件的开发效率,“ArcGIS Visual Studio IDE Integration Framework”提供了可重用的代码段供开发人员使用。 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系列产品的开发平台,它是基于Microsoft COM技术所构建的GIS组件产品,是一套可重用的通用的二次开发组件产品,它可以用于大量开发框架中,包括流行的像 .NET 、Visual C+、Java等
34、开发环境。 ArcObjects不是为最终用户而是专门为开发人员提供的二次开发组件。 ArcObjects是ArcGIS系列产品的基础,大部分ArcGIS产品都是由ArcObjects构建的。,3.2 ArcObjects的组件库,ArcObjects是一套庞大的COM组件集合,ArcGIS 各版本各种COM类型统计见下表:,为了更好地管理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 如果不记得某个接口或对象属于哪个命名空间的时候,可以通过开发帮助查找。,3.3 理解对象模型图,ESRI提供了多种方法让用户了解ArcObjects组件及不同组件之间的
36、关系 ESRI提供的一系列OMD的PDF文件 开发帮助、API Reference VS.NET中的对象浏览器,通过阅读ArcObjects的对象模型图 (Object Model Diagram,OMD) ,可以快速了解ArcObjects的结构和不同组件之间的关系。 OMD使用UML(Unified Modeling Language,统一建模语言)描述,它补充了在对象浏览器中看不到的信息,可以帮助程序员了解类之间的关系,如何从一个类到另一个类,选择正确的接口,获取需要的属性和方法等。,VS 中的对象浏览器,3.3.1 类与对象,在ArcObjects中存在三种类型的类: 抽象类(Abst
37、ract Class) 组件类(CoClass) 普通类(Class) 抽象类不能用于产生一个新的对象,但是可以用于定义一个子类。 组件类是一个可以直接用new创建对象实例的类,它的实例对象不依赖其他对象的存在而存在,其生存周期也不用其他的对象管理。 普通类不能够直接产生一个对象,但它可以用其他的普通类或组件类的方法产生,而不是使用new关键字来完成。,3.3.2 类与类的关系,ArcObjects的类之间存在四种关系 依赖关系 关联关系 组合关系 类型继承,WorkspaceFactory,Workspace,MapControl,Map,Map,Layer,*,Curve,Segment,
38、Path,PolyCurve,4 组件对象模型,软件开发历史 什么是组件对象模型,4.1 软件开发历史,软件重用和开发效率始终是软件开发的核心问题。 在早期(面向过程语言),人们为了重用,将一些基本的数学计算函数和界面设计函数设计成函数库,让其他软件开发人员调用。它为应用开发者提供了方便,但是重用的粒度太小。 面向对象语言的出现,提高编程的粒度。面向对象语言的基本单位是类,它封装了数据成员和函数成员 ,将最小组件的粒度提高了一个等级。但是,一个类提供了很多种方法和属性,使用和管理很不方便。,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对象相关的事件,开发人员根据需要实现事件接口。,接口可以从多个父接口继承(C# 类呢) 接口继承机制是非常有用的,在很多时候程序员可以将一个子接口类型的对象定义为父接口类型的对象,从而实现一般化的操作,如: Private void CreateGeometry (IPolygo
43、n pPolygon) Private void CreateGeometry (IGeometry pPolygon) COM对象的接口一旦被公布,就不能再修改,但可以增加新接口,在ArcObjects中有很多以“2”、“3”结尾的接口,都是这样发展的产物。 COM组件必须被注册后才能使用。,COM的缺陷:由于COM对象可以被重用,这样多个程序可能共用一个COM对象,如果这个COM组件升级了,就很可能出现其中某个程序无法使用新组件,导致程序不能运行的情况,这种情况被称为“DLL HELL”(DLL灾难)。,5 .NET平台概述,针对Windows平台存在的缺陷,微软提出了全新的.NET技术体
44、系,其主要包括 .NET Framework Visual Studio.NET,Visual Studio .NET 是一套完整的开发工具,用于生成各种类型的应用程序,包括 ASP Web 应用程序、XML Web services、桌面应用程序和移动应用程序。 .NET Framework 是生成、部署和运行 各种应用程序的平台。 .NET Framework 具有两个主要组成部分: 通用语言运行时(Common Language Runtime-CLR),是 .NET Framework 的基础 .NET Framework 类库。,.NET Framework体系结构,5.1 通用语言
45、运行时(CLR),通用语言运行时管理内存、线程执行、代码执行、代码安全验证、编译以及其他系统服务。 CLR处于.NET Framework的最底层,是.NET Framework的基础,它为C#.NET、VB.NET、C+、J#等多种语言提供了统一的运行环境,使得用某种高级语言编写的应用程序可以在不同的操作系统和硬件上运行,而不需要按照特定环境重写应用程序。,.NET 环境下程序编译执行过程,Traditional Compilation:,Compilation and Execution in .NET,具体的运行过程: 使用VB、C# 或任一种CLR支持的编程语言编写应用程序源代码 由编
46、程语言对应的编译器将源代码翻译成一个程序集(Assembly)- .NET组件,为一EXE或DLL文件。这个程序集包括中间语言MSIL代码、元数据和一个文件清单。 MSIL代码也简称IL代码,其特点是独立于特定操作系统和硬件平台。 元数据详细描述了MSIL代码正确执行所需的各种相关数据类型,包括描述Assembly的信息,描述类型的信息,描述其它属性的信息等。这样就使.NET应用程序代码具备了自描述特性。 清单则列出了程序集中的所有文件和软件组件,同时指出了CLR在哪里可以找到应用程序运行时需要的其它组件。,CLR加载IL代码,同时收集有关应用程序的事实信息。 即时编译器JIT将IL代码动态编
47、译成可执行的本机代码。不同的机器使用不同的JIT编译器,所以同一个应用程序的MSIL代码经不同机器的JIT编译器编译之后,便可以在不同的机器上执行。,Single file assembly,Multi-file assembly,通用类型系统,CLR借助通用类型系统(Common Type System,CTS)对代码类型进行严格的安全检查,避免了不同组件之间可能存在的类型不匹配的问题。,5.2 .NET Framework 类库,.NET Framework类库(FCL)是一套软件组件,用于编写在CLR控制下运行的代码。类库分级组成了一个庞大的功能集,包括显示图形用户界面、读写XML数据、
48、在Internet上通信、访问数据库等多种功能。,5.3 .NET 的强命名程序集,以前在Windows下开发程序时常会遭遇“DLL Hell”问题,即动态链接库的向后兼容问题。 微软在.Net产生前,使用Guid来唯一的标识每一个COM组件,为了运行COM组件就必须在组册表中对其进行注册。多个应用程序可以共享相同的COM组件,当COM组件版本升级时,可能导致原来引用此COM组件的程序不能正确运行,等等。 在.Net中,微软引入了一种新的解决方案:强命名程序集(Strong Name),以及与之配套的全局程序集缓存(GAC -Global Assembly Cache )来解决这个问题。,强命
49、名程序集:.Net使用Name、Version、Culture、PublicToken四个属性来唯一标识一个程序集。 创建一个强命名程序集需要获得一个用强命名实用工具(StrongNameUtility,即SN.exe)产生的密钥。 全局程序集缓存(GAC): 如果一个Assembly要被多个应用程序访问,那么它就必须放在一个CLR已确知的目录下,并且CLR在探测到有对该Assembly的引用时,它必须能自动到该目录下寻找这个程序集。这个已确知的目录称作GAC,就是全局程序集缓存。它一般位于下面的目录下:C:WindowsAssembly 使用gacutil.exe命令可以将具有强命名的程序集
50、添加到全局程序集缓存。,命令行下看到的GAC,在开发一般的、非共享的程序时,不需要使用强命名的程序集,仅将项目(Project)编译成.DLL或者.EXE即可。但是,如果开发的是组件库、框架时,通过对程序集进行强命名,并将其部署到GAC中,可以保证程序集不会出现版本问题。,6 .NET组件与COM组件的互操作,本节内容:,COM包装(COM Wrappers) ESRI提供的Primary Interop Assemblies 向COM公开.NET对象 COM到.NET的类型转换,6.1 COM包装(COM Wrappers),为了实现传统的COM程序与.NET程序之间的相互调用,.NET提供
51、了两个包装类:运行时可调用包装(runtime callable wrapper,RCW)和COM可调用包装(COM callable wrapper,CCW)。每当一个.NET客户程序调用一个COM对象的方法时就会创建一个RCW对象;相反,每当一个COM客户程序调用一个.NET对象的方法时就会创建一个CCW对象。,6.2 ESRI提供的Primary Interop Assemblies,Primary interop assemblies(PIAs,主互操作程序集)是COM软件厂商提供的为其COM组件在.NET环境下运行的互操作程序集,PIAs暴露COM组件中的所有类、接口和常量,作为 .
52、NET 托管类。 ESRI为所有的ArcObjects类型库提供了PIAs,ArcGIS的.NET开发人员只能使用这些安装在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开发环境(Register for COM Interop)。 程序集注册 (Regasm.exe) 的命令行工具用来注册或注销与 COM 一起使用的程序集。Regasm.exe 会将有关类的信息添加到系统注册表中,以便 COM 客户端透明地使用 .NET 类。例如: regasm EditTools.dll /tlb:EditTools.tlb /codebase,在Visual Studio.NET开发环境中,通过下列步骤来来自动完成.NET组件的注册: 在“解决方案资源管理器”中,鼠标右键点击要注册的项目(即正在开发的.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环境下自定义的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. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年晋江市新塘街道办事处公开招聘编外人员的备考题库附答案详解
- 2026年山西旅游职业学院单招综合素质考试题库带答案详解
- 2025年中国地质大学(北京)后勤集团招聘备考题库及答案详解一套
- 2025年农业农村部耕地质量和农田工程监督保护中心度面向社会公开招聘工作人员12人备考题库及参考答案详解1套
- 实验活动6 一定溶质质量分数的氯化钠溶液的配制(表格式教学设计)
- 中国煤炭地质总局2026年度应届高校毕业生招聘备考题库及参考答案详解1套
- 2026年江西省上饶市高职单招综合素质考试题库带答案详解
- 2025年河池市金城江区东江镇卫生院会计岗位公开招聘备考题库及参考答案详解1套
- 湖北长江产业载体运营管理有限公司(湖北产融资本管理有限公司)社会招聘20人备考题库参考答案详解
- 2025年山东土地资本投资集团有限公司招聘11人备考题库及1套完整答案详解
- 2026年及未来5年市场数据中国电炉钢行业市场全景监测及投资战略咨询报告
- 私宴服务礼仪培训
- 2025-2026学年教科版(新教材)小学科学三年级下册(全册)课时练习(附目录)
- 安全环保检查表(样表)
- 雨课堂学堂在线学堂云商务英语翻译(Business English Translation Interpretation)西北工业大学单元测试考核答案
- 2025年甘肃省平凉市崆峒区上杨回族乡新庄湾村招聘行政村村文书备考题库及答案详解(全优)
- 地调局考试试题及答案
- 医院无菌技术操作规范
- 自动化生产线安装调试规范标准
- 2025年市市直事业单位招聘考试《公共基础知识》(主观题)试题及答案解析
- 历年中小学校长招聘考试真题及答案
评论
0/150
提交评论