创建组件的基本步骤

合集下载
  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<project name>’来编译DLL,并将其输出到工程属性页指定的位置。

如果代码中没有错误,就可以编译DLL,不然Visual Studio会报错。

∙'<Class name>没有实现接口成员<member name>。

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

∙'assembly中定义的类<type name>没有引用。

'--没有添加程序集的引用。

∙'无法删除文件<DLL file>。

访问<DLL path>被拒绝'或'无法将文件<DLL file>复制到<DLL path>。

这个进程不能访问文件<DLL file>,这个文件正在被其他进程使用。

'--这个DLL正在使用,例如ArcMap或ArcCatalog正在使用。

在开发组件的测试/调试阶段可能会遇到这个错误。

Step9:Test/Debug/Recompile
在桌面应用程序内调试和测试组件。

在Visual Studio 2005中开始调试时,要在工程属性页设置调试属性。

在调试选项卡上,选择从外部程序开始,输入桌面应用程序的路径,例如C:\Program Files\ArcGIS\bin\ArcMap.exe。

在Debug menu中单击Start Debugging(F5)开始调试。

启动桌面应用程序并到达断点。

使用输出和监视窗口查看调试过程中遇到的错误和异常。

如果没有按照预期方式工作或产生了错误,停止调试,修改代码重新编译代码和测试。

相关文档
最新文档