VB 6.0下的ArcObjects嵌入式组件调试技巧

(从网上转的,对内容作了一些修改)

 

1. 实现相应的接口

      创建一个ActiveX DLL的工程,并在工程下添加一个新的类(以ArcGISCommand为例)。ArcGIS桌面平台通过接口来识别不同的组件是否可以合法的嵌入到平台 中。想要实现一个ArcObjects的嵌入式按钮,我们需要至少需要实现ICommand接口。故在ArcGISCommand中我们首先需要输入以下 代码:
Implements ICommand

2.添加相应的实现

      根据COM规则,我们需要为所实现的接口中的每一个成员提供实现,故我们在下图所示的环境中选中每一个成员,使其至少拥有一个空实现。需要注意的是,ICommand的接口下的很多成员我们可以提供空的实现,这样可以避免 书写太多的代码。但是有两个成员是我们必须提供实现的,它们是OnCreate以及Category。通过OnCreate我们可以接收系统传入的钩子, 从而达到使黑盒模式中的代码有效的目的。而Category属性则可以保证我们在ArcMap中的自定义对话框内可以看到我们所写的这个类。

 

Private Sub ICommand_OnCreate(ByVal hook As Object)
'Set m_app = hook
Exit Sub

Private Property Get ICommand_Category() As String
   ICommand_Category 
= "ESRI China Training"
End Property



3.编译动态链接库
      最终通过一系列的实现(此过程篇幅较长,再次省略),我们将希望插入的代码添加到这个模块的各个成员中。经过检查无误后,我们将其编译成想要的DLL文 件。在VB 6.0的开发环境中选中ESRI自带的插件:ESRI Compile and Register(这个工具由ESRI提供,安装ArcGIS Desktop Develop Kit后可以获得。在"DeveloperKit"Addins文件夹下找到RegisterVBAddIns.EXE可执行程序,安装后即可获得。)。 选中您开发的类名,在右侧窗体中选中ESRI MX COMMANDS类别,开始进行编译。

      编译后我们可以获得一个DLL文件以及一个同名的*.reg文件。这个注册表文件可以帮助用户将开发成果顺利的注册到其他客户机器上。Reg的中包含了我们编写的类的ProgID、ClsID以及的注册表类别ID,内容大致如下:
; CoClass: EsriChinaTraining.ArcGISCommand
; CLSID: {5458535E-52D8-4879-9C38-5D53323D2059}
; Component Category: ESRI Mx Commands
[HKEY_LOCAL_MACHINE"SOFTWARE"Classes"CLSID"{5458535E-52D8-4879-9C38-5D53323D2059}"Implemented Categories"{B56A7C42-83D4-11D2-A2E9-080009B6F22B}]

4. 调用按钮
      在ArcMap的“自定义”对话框中,在左侧找到我们所设定的Category名称,右侧选中相应的类名。拖放到ArcMap中的任意工具栏上即可完成按钮的创建。

VB 6.0下ArcObjects嵌入式按钮的调试
      可以一次运行成功不需要调试和修改的代码在编程过程中毕竟是少数。在开发完整按钮的嵌入式组件后,我们将面临如何调试它的难题。由于ArcGIS Desktop中的组件采用了双重注册的方式,所以简单的采用VB 6.0下的“启动外部应用程序”的调试方式将难以达到目的。常常会出现所设的断点无法捕捉系统相应动作的情况。

      为了解决这个问题,我们可以采用下面这样的方式对“启动外部应用程序”进行一定的补充,以便达到调试的目的。

1. 设置外部启动程序
      在VB 6.0的环境下,选中“工程”-“工程属性”,并且切换到“调试”标签页下。在“调试”标签页,选中启动外部应用程序并找到ArcMap.exe。

2. 添加组件到ArcMap环境中

       点击运行,ArcMap自动引导应用程序启动。如果发现我们自己所写的类尚未出现在ArcMap的自定义对话框中,我们可以打开ArcGIS的注册工具:组 件类别注册器 进行注册。(“开始”菜单 - >ArcGIS - >Develop Tools ->Componet Category Manager). 选中类别后点击“Add Object”,找到编译好的动态链接库,添加.

 

3. 关闭ArcMap
      关闭ArcMap,但保持编译环境的运行状态不变

4. 重新启动ArcMap
      重新启动ArcMap,但保持编译环境的运行状态不变

5. 添加断点并调试
      此时在我们开发的模块中添加断点,如在OnClick事件下添加断点。并在ArcMap环境下点击此按钮,我们会发现断点顺利拦截运行。此时,我们就可以像在同一个开发环境下一样进行代码的调试了。

posted on 2009-05-15 09:59  炜升  阅读(406)  评论(0编辑  收藏  举报