使用动态链接库组件进行ArcGIS开发
动态链接库英文为DLL,是Dynamic Link Library 的缩写形式,DLL不是可执行文件,DLL 是一个包含可由多个程序同时使用的代码和数据的库。
通过使用 DLL,程序可以实现模块化,由相对独立的组件组成。例如,一个计帐程序可以按模块来销售。可以在运行时将各个模块加载到主程序中(如果安装了相应模块)。因为模块是彼此独立的,所以程序的加载速度更快,而且模块只在相应的功能被请求时才加载。此外,可以更为容易地将更新应用于各个模块,而不会影响该程序的其他部分。例如,您具有一个建筑工程造价计算程序,而不同区域的建筑材料其价格不尽相同,而且随着时间的变化,建筑材料的价格也随着经济的发展而发生着变化,当这些变化被隔离到 DLL 中以后,您无需重新生成或安装整个程序就可以应用更新。
DLL的优点:
- 扩展了应用程序的特性;
- 可以用许多种编程语言来编写;
- 简化了软件项目的管理;
- 有助于节省内存;
- 有助于资源共享;
- 有助于应用程序的本地化;
- 有助于解决平台差异;
- 可以用于一些特殊的目的。windows使得某些特性只能为DLL所用。
DLL其实就是Windows平台下的一种类的文件编译格式,该格式的文件可以被任何支持COM规则的语言所支持和引用。ArcGIS Object组件本身的物理文件就是DLL文件,开发人员也可以编写自己的DLL组件进行二次开发。
下面以一个实例来演示如何在Visual Basic环境下创建DLL组件。
启动Visual Basic,建立一个ActiveX dll工程。如下图所示:
为工程添加引用,Projects>References打开References对话框,在对话框中选择ESRI System Object Library、ESRI SystemUI Object Library、ESRI Framework Object Library和ESRI ArcMapUI Object Library四个对象库。如下图所示:
添加名为Form的窗体,向窗体中添加名为Picture1的图片框,设置Picture1的Picture属性,为其指定一个bmp格式的图标。
下面可以开始编码了。打开Class1类模块文件,在开头加入如下代码:
Option Explicit
Implements ICommand
Dim pApp As IApplication
在General下拉框中选择ICommand接口,在Declarations下拉框中选择Bitmap,带自动出现的代码段中添加ICommand_Bitmap = Form1.Picture1.Picture.Handle来实现实现ICommand接口的BitMap属性。使用同样的步骤实现IComand接口的Caption、Category、Checked、Enabled、HelpContextID、HelpFile、Message、Name、ToolTip属性和OnClick与OnCreat方法。完整代码如下:
Option ExplicitImplements ICommand
Dim pApp As IApplication
Private Property Get ICommand_Bitmap() As esriSystem.OLE_HANDLE
ICommand_Bitmap = Form1.Picture1.Picture.Handle
End Property
Private Property Get ICommand_Caption() As String
ICommand_Caption = "HSCommand"
End Property
Private Property Get ICommand_Category() As String
ICommand_Category = "HSCustomTools"
End Property
Private Property Get ICommand_Checked() As Boolean
End Property
Private Property Get ICommand_Enabled() As Boolean
Dim pMxDoc As IMxDocument
Dim pLayerCount As Integer
Set pMxDoc = pApp.Document
pLayerCount = pMxDoc.FocusMap.LayerCount
If pLayerCount > 0 Then
ICommand_Enabled = True
Else
ICommand_Enabled = False
End If
End Property
Private Property Get ICommand_HelpContextID() As Long
ICommand_HelpContextID = 1234
End Property
Private Property Get ICommand_HelpFile() As String
End Property
Private Property Get ICommand_Message() As String
ICommand_Message = "This is my custom command"
End Property
Private Property Get ICommand_Name() As String
ICommand_Name = "HSCustomTool_MyCommand"
End Property
Private Sub ICommand_OnClick()
MsgBox "Clicked on my command"
End Sub
Private Sub ICommand_OnCreate(ByVal hook As Object)
pApp = hook
End Sub
Private Property Get ICommand_Tooltip() As String
ICommand_Tooltip = "HSCommand"
End Property
编译该工程,以建立dll文件。至此,该动态链接库就建立好了。
下面在ArcMap中使用刚建立的基于ICommad接口的自定义命令。启动ArcMap,Tools>Customize,弹出Customize对话框,切换到Toolbars选项卡,新建一个Toolbar。如下图所示:
切换到Commands选项卡,单击Add from file 按钮,导航至刚才建立的dll文件,这个自定义的命令就添加至ArcMap中了。在Categories列表框中找到HSCustomTools,在Commands列表框中找到HSCommand,将其拖拽至刚建立的自定义工具栏上。
OK,向ArcMap中添加数据,测试一下自定义命令吧! ^_^ 效果如下:
本文重点在于对“使用动态链接库组件进行ArcGIS开发”这一开发方式进行介绍性演示,在开发DLL组件功能上没有深入探究。可根据实际需要扩展DLL功能。
出处:http://www.cnblogs.com/hans_gis/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。