【vb精品源码栏目提醒】:本文主要为网学会员提供“VB封装DLL实例讲解(二) - 软件工程”,希望对需要VB封装DLL实例讲解(二) - 软件工程网友有所帮助,学习一下!
VB 封装 DLL 实例讲解(二) 上文中我们已经就 DLL 的基本概念,以及如何将 VBA 代码封装为 DLL,如何引用该生成的 DLL动态链接库,进行了初步的讲解,我想大家对于
VB 封装 DLL 应该有了一个初步的了解。
下面主要就 DLL 如何实现对 ACCESS 对象进行封装方法进行探讨。
一、如何在
VB 中实现对 ACCESS 对象编程 (一)在
VB 中引用 ACCESS 对象类库 我们要通过编译 DLL 来实现对 ACCESS 对象的封装,首先必须在
VB 中引用 ACCESS 对象类库,这样我们就可以在
VB 中,实现对 ACCESS 应用程序中的对象进行编程。
打开
VB 编辑窗口,点菜单 - , 【引用对话框】 点选 【工程】【引用】 打开 , “Microsoft Access 11.0 ObjectLibrary”完成对当前版本 ACCESS 应用程序对象的引用。
实例演示版本为 ACCESS 2003 2 点击确定 1 钩选 ACCESS 对象库 库文件所在路径 对 ACCESS 对象库的引用很关键,否则我们无法实现对 ACCESS 对象的编程 (二)了解 ACCESS 对象模型 在
VB 中要对 ACCESS 对象进行编程,还必需对 ACCESS 所提供的各项对象有一定了解,因为
VB就是通过 ACCESS 对象的方法与属性,来完成各项操作与设置,下图为 ACCESS 2003 的对象部分模型图例。
上图为 ACCESS 2003 对象模型,因为篇幅的问题,文中只显示模型中部分对象,要了解全部对象模型,请大家参阅帮助。
(三)
VB 编程中 ACCESS VBA 与
VB 对象表述区别 1、ACCESS VBA 与
VB 的顶层对象都为 Application ,但在编程中 ACCESS VBA 顶层对象表述为: 。
Application,而在
VB 编程中顶层对象用简写:App 表述(到
VB.NET 又改回了 Application) 例程:在
VB 编程中获得
VB 及 ACCESS VBA 获取当前路径实例: 在
VB 中获得当前路径: App.Path 在
VB 中获得 ACCESS 的当前路径: Application.CurrentProject.Path 在 office 各应用程序之间调用各组件时通常在对象前加上库名,如:Access.Application来表述, 在 但因为
VB 与 ACCESS 顶层对象原本表述就存在区别,
VB 中可以直接用 Application 表述 ACCESS应用程序对象,并不会产生冲突的问题。
2、ACCESS VBA 和
VB 中部分预定义类对象(如:窗体、控件等)表述基本相同,以“标签控件” 在为例, 与 ACCESS VBA 均为 Label,
VB 编程中为了与 ACCESS 预定义类对象加以区别,
VB ACCESS标签对象通常用 ACCESS.Label 表述。
例程:在
VB 编程中定义
VB 及 ACCESS 标签控件对象实例: 在
VB 中定义
VB 标签对象: Dim m_Label As Label 在
VB 中定义 ACCESS 标签对象: Dim m_Label As Access.Label 在进行 DLL 编程时,特别需注意对象表述区别的问题,否则无法编译或是编译后在 ACCESS调用中报错。
(四)
VB 编程中关于 ACCESS VBA 专属常量 ACCESS VBA 专属常量以 “ac” 如: 开头, 控件类 (AcControlType) 中的文本控件常量为 acTextBox,这些常量不一定能被
VB 所识别,解决办法通常不使用“常量名”,而直接使用“常量值”,或以输入参数方式传递的方法来解决。
例程:实现隐藏所有文本控件。
acTextBox 常量值为 109。
Dim ctl As Access.Control 申明 ACCESS 控件对象 Dim frmClt As Access.Controls 申明 ACCESS 控件集合 遍历所有 ACCESS 控件集合,如为文本控件,则不显示该控件 For Each ctl In frmClt.Controls 文本控件类常量值为 109,以常量值替代 acTextBox 常量名 If ctl.ControlType 109 Then ctl.Visible False Next 你可以通过帮助查阅 ACCESS 专属常量值,也可以在 ACCESS VBA 中通过程序方式获取,如:在立即窗口输入:acTextBox 回车,就可以 acTextBox 常量值为:109。
二、DLL 封装 ACCESS 对象实例演示 (一)ACCESS 的 MDB 实例 MDB 实例演示获得 ACCESS 版本信息, 并在标签 Label0 中显示 , (见下图)具体参看实例中 frmVer6窗体中的代码,及类模块 ClsVeresion 中代码。
mdb 实例中 frmVer1-frmVer6 各窗体中具体演示了,代码按 DLL 封装需要整理的思路。
例程:frmVer6 窗体加载事件代码Private Sub Form_Load 申明自定义类的实例 Dim m_Ver As New ClsVeresion m_Ver.objAddItem Label0 调用自定义类的 objAddItem 方法End Sub 例程:ClsVeresion 类模块代码程序功能:定义类接口,将版本信息输出并在标签中显示Public Sub objAddItemm_label As Label m_label.Caption AppVersionEnd Sub函数功能:输出 ACCESS 版本信息Private Function AppVersion As String Dim strVer As String 定义字符串变量 将版本号赋值给字符串变量 strVer Application.Version 根据版号输出对应版本信息 Select Case strVer Case 8.0 AppVersion Access 97 Case 9.0 AppVersion Access 2000 Case 10.0 AppVersion Access 2002 Case 11.0 AppVersion Access 2003 Case 12.0 AppVersion Access 2007 End SelectEnd Function (二)DLL 的封装 ACCESS 对象实现 1、打开
VB6.0 编辑器,点菜单【新建工程】,在【新建工程】对话框中,点选【ActiveX DLL】,点【确定】。
2、修改工程名及类名,实例中我定义的工程名:GetAccVer ,类名:ClsAccVer ,修改完成以后点选菜单【保存】工程 (见下图。
工程名就是我们后面将引用的 DLL 库名,类模块名为代码中我们申明的类名。
3、点菜单【工程】-【引用】 ,点选“Microsoft Access 11.0 Object Library”完 ,打开【引用对话框】成对当前版本 ACCESS 应用程序对象的引用。
4、将 MDB 中类模块 ClsVeresion 代码复制到
VB 中 ClsAccVer 类模块中,按前面我们所述的
VB 中实现 ACCESS 对象编程的注意要点略做修改。
(见下图划红线部分) 1、因为
VB 与 ACCESS VBA 中标签类对象都为 Label,因此加上库名(Access.Label)加以区别; 2、因为
VB 与 ACCESS VBA 顶层应用程序对象,表述原本就有区别,所以无需特别区分。
例程:ClsAccVer 类模块代码 程序功能:定义 DLL 接口,将版本信息输出并在标签实例中显示 Public Sub objAddItemm_label As Access.Label m_label.Caption AppVersion End Sub 函数功能:输出 ACCESS 版本信息 Private Function AppVersion As String Dim strVer As String 定义字符串变量 将版本号赋值给字符串变量 strVer Application.Version 根据版号输出对应版本信息 Select Case strVer Case 8.0 AppVersion Access 97 Case 9.0 AppVersion Access 2000 Case 10.0 AppVersion Access 2002 Case 11.0 AppVersion Access 2003 Case 12.0 AppVersion Access 2007 End Select End Function 4、编译 DLL,点菜单【文件】-【GetAccVer.dll】动态链接库,封装 DLL 就完成了。
你现在可以在 ACCESS 中引用该 DLL 测试一下看看成果了。
参看实例中 frmVer7 窗体,如实例引用报错,请重新引用 GetAccVer.dll 即可。
因为本人认知及文字水平所限不免有错漏之处还请大家斧正。
本文的 Word 文稿、
VB 源码、MDB实例均在实例包中。
在后文中我们主要就动态链接库引用的方法和技巧结合实例进行探讨。
江羽 2010-05-30 午