创建组件的基本步骤

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

在这个论题中,你将学会怎样创建一个可以插入到ArcGIS Desktop application的组件。重点是在特定的语言中如何编写代码或怎样解决一个特定的ArcObjects问题。这部分还提供怎样包装component的解决方案以及应用于ArcGIS。

下列步骤用来创建一个组件。

1.创建一个新的工程。

2.添加引用。

3.创建一个新类。

4.实现接口。

5.导入命名空间。

6.编写实现代码。

7.将组件插入ArcGIS Desktop中。

8.将组件编译为DLL。

9.测试/调试/重新编译。

Step 1:创建一个新的工程

设计一个新的ArcGIS桌面组件,你要创建一个新的类库(DLL)。

为工程和每个类提供有意义的名字。工程的名字将是默认的DLL的名字。当然你也可以在工程属性页上重命名。

为了在ArcGIS Desktop应用程序中使用.Net组件,要在Assembly Information 对话框中设置COM可见。

下一步是在开发时使ArcGIS桌面软件可以使用组件,在Visual Studio中编译时通过COM注册程序集。属性页的Build(C#)或Compile()选项卡中可以设置COM Interop。

一个简单的DLL文件可以包含若干类或组件。因此为每个组件创建一个新的类库是不必要的。需要的话,可以将许多按钮、工具条和其他组件放置在一个程序集中。

ArcGIS Visual Studio IDE集成框架中的ArcGIS工程模板可以为Dektop组件自动设置工程属性。

Step 2:引用ArcObject组件

在ArcGIS桌面应用程序中使用VBA编程时,不需要明确的引用ArcObjects类库,因为大部分已经添加了引用。在独立开发环境,如Visual Studio 2005中则不同。.NET 开发时将COM对象库导入到.NET程序集中便可引用任何对象。除了标准的.Net

framework assemblies外,代码中引用的任何程序集都要明确的导入到工程中。

引用其他的assemblies,从工程菜单中选择Add Reference...。几乎所有的工程都要引用ESRI.ArcGIS.SystemUI,因为这个组件中包含按钮和命令的插入接口(例如,ICommand、ITool)。

Step 3:创建类

为了保证.NET组件与ArcGIS desktop应用程序相关联,需要添加若干COM关联属性到类中。包括为每一个.NET组件分配一个确切的GUID。可以使用Visual Studio 2005中的GUID的创建程序获得一个新的GUID。

在中,从添加项对话框中选择COM类模板。这个模板已经包含了所有COM 关联属性。

在C#中,从添加项对话框中选择类模板,在工程中创建后即添加GuidAttribute和ClassInterfaceAttribute。确保类的访问修饰符是public并记着C#区分大小写。

ArcGIS Visual Studio IDE集成框架中的ArcGIS项模板提供更简单的方法来创建类和并将其与COM关联。

Step 4:实现所需的接口

为了确保你的组件能被ArcGIS Desktop应用程序识别,需要实现一个或多个接口或.NET基类,根据组件而定。

在ArcMap的用户接口上添加新的控件,需要应用一些基本属性,例如控件上的图像(Bitmap property)、鼠标停留在控件上显示的内容(ToolTip),最重要的是单击控件时控件的响应(OnClick event procedure)。作为程序员,你要编写代码来处理这些属性和方法。

ESRI.ArcGIS.SystemUI的ICommand接口

Step 5:导入命名空间

在VC++、VB6或VBA中,正确引用类,需要通过库名指定完全限定名,在这些语言中通过完全限定名引用是可选的。然而,在.NET中必须通过命名空间完全限定类。例如,ESRI.ArcGIS.SystemUI命名空间下ICommand接口的完全限定名是ESRI.ArcGIS.SystemUI.ICommand.为了简化代码,增强可读性(节省输入命名空间的时间),可以在代码开头插入using指令(C#)或imports()。在 中,命名空间导入也可在工程属性页的引用选项卡上设置。使用Insert ArcGIS Using Directives command快速向代码文件中导入ESRI命名空间。

Step 6:编写实现代码

确定实现的接口后,就需要为每个接口和属性编写代码。要符合组件对象模型的规定,就意味着在类文件中实现这些方法和属性。

在类的声明中输入实现代码时,Visual Studio的IntelliSense要素会显示一个智能的标签下拉表来帮你实现接口。

Step 7:将组件插入ArcGIS桌面应用程序

在ArcGIS桌面应用程序中使用自定义组件时,需要先在操作系统中注册并注册到正确的组件类型中。

在.NET中,当程序集通过COM注册时,组件自动注册到组件类型中。反之,反注册程序集会移除组件注册入口。

.NET框架包含两个属性类(System.Runtime.InteropServices命名空间中的ComRegisterFunctionAttribute和ComUnregisterFunctionAttribute),当注册和反注册组件可以调用其中的方法。注册类中的CLSID通过这两种方法进行传递,利用这个信息就可以在方法内书写代码进行注册和删除。在组件类型中注册组件需要知道组件的的类型ID(CATID)。

Step 8:将组件编译为DLL

代码编好后,若想将其运行于桌面应用程序中,需要将其编译成一个DLL。从Build 菜单中选择‘Build’来编译DLL,并将其输出到工程属性页指定的位置。如果代码中没有错误,就可以编译DLL,不然Visual Studio会报错。

∙'没有实现接口成员。'--没有实现接口的所有方法和属性。

∙'assembly中定义的类没有引用。'--没有添加程序集的引用。∙'无法删除文件。访问被拒绝'或'无法将文件复制到。这个进程不能访问文件,这个文件正在被其他进程使用。'--这个DLL正在使用,例如ArcMap或ArcCatalog正在使用。在开发组件的测试/调试阶段可能会遇到这个错误。

Step9:Test/Debug/Recompile

相关文档
最新文档