创建组件的基本步骤
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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)开始调试。
启动桌面应用程序并到达断点。
使用输出和监视窗口查看调试过程中遇到的错误和异常。
如果没有按照预期方式工作或产生了错误,停止调试,修改代码重新编译代码和测试。