设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

1234下一页
返回列表 发新帖
查看: 17283|回复: 38
打印 上一主题 下一主题

[与其它组件] VB封装DLL实例讲解(一)

[复制链接]
跳转到指定楼层
1#
发表于 2010-11-3 18:39:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 tanhong 于 2010-11-23 14:19 编辑

一、DLL基本概念
(一)概念
DLL即动态链接库(Dynamic Link Library),是由可被其它程序调用的函数集合组成的可执行文件模块。DLL不是应用程序的组成部分,而是运行时链接到应用程序中。

(二)主要优点:
1、多个应用程序可以共享一个DLL,而且当多个应用程序调用库的同一个函数时,可执行文件中装入的只是该函数的内存地址,从而节省内存和磁盘空间;
2、使用动态链接库易于我们维护用户程序,即使对动态链接库进行修改也不会影响用户程序;
3、从ACCESS角度而言,还可以更好的确保核心代码的安全。

二、VB封装VBA代码,构建自定义的DLL动态链接库
(一)ACCESS中实例代码
下面是一个“快速获取数字(Acc).mdb”实例(该实例在文件包中),单击“提取结果”按钮,将文本框中的数字在弹出消息显示出来。
我将就这个实例演示如何将该实例VBA代码封装成为DLL

? 按钮单击事件代码如下:


  1. Private Sub CmdFindnumber_Click()
  2.   Dim strM   As String     '初始字符串
  3.   Dim strOut  As String     '输出字符串变量
  4.   Dim I
  5.   
  6.   strM = Me.Text1
  7. '从第一个字符向最后一个字符循环,以提取每个字符
  8.   For I = 1 To Len(strM)
  9.       '判断是否为0到9字符,是则赋值输出
  10.       If Mid(strM, I, 1) Like "[0-9]" Then
  11.          strOut = strOut & Mid(strM, I, 1)
  12.       End If
  13.   Next I
  14.   '用MsgBox函数进行输出测试
  15.   MsgBox strOut
  16. End Sub
复制代码
   M 以上代码还不能直接用于封装,须将其修改成为公用函数(过程)

(二)VB封装实例中VBA代码
步骤一:VB编辑窗中,点菜单【文件】-【新建工程】,打开新建工程窗口

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

本帖被以下淘专辑推荐:

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享分享 分享淘帖1 订阅订阅
2#
 楼主| 发表于 2010-11-3 18:44:08 | 只看该作者
本帖最后由 tanhong 于 2010-11-3 21:26 编辑

步骤二:修改工程名,这即生成的DLL库名
1修改工程名为:我的动态库
步骤三:修改类名
1改类名为:提取数字

3#
 楼主| 发表于 2010-11-3 18:45:04 | 只看该作者
本帖最后由 tanhong 于 2010-11-3 21:21 编辑

步骤四:在代码窗口输入如下代码。将ACCESS中的单击事件代码,略做修改成为一个公用函数,然后复制到VB代码编辑窗口
?代码如下

  1. '将这前的ACCESS代码改成一个公用函数
  2. '输入:strPutString 字符串变量,需分离数字的字符串
  3. '输出: fFindNumber字符串变量,得到的数字字符
  4. Public Function fFindNumber(strPutString As String) As String
  5.    Dim strOut  As String     '输出字符串变量
  6.    Dim I
  7.   
  8.    '从第一个字符向最后一个字符循环,以提取每个字符
  9.    For I = 1 To Len(strPutString)
  10.       '判断是否为0到9字符,是则赋值输出
  11.        If Mid(strPutString, I, 1) Like "[0-9]" Then
  12.          strOut = strOut & Mid(strPutString, I, 1)
  13.        End If
  14.    Next I
  15.    '数字输出
  16.    fFindNumber = strOut
  17. End Function
复制代码


步骤五:编译DLL,点菜单【文件】-【生成我的动态库.dll】,VBA代码封装DLL就完成了。

三、mdb中调用自定义DLL动态链接库
(一)新建数据库及窗体
新建【快速提取数字(DLL)实例.mdb】数据库,新建一个窗体【frmMain】,在窗体添文本框【text0】,按钮【CmdFindNum】,Caption属性:“提取数字”(见下图)
(二)引用我的动态库.dll】库
Alt+F11】打开VBE窗口,点菜单【工具】-【引用】,打开引用对话框,完成对我们自己编译的DLL的引用。
(三)在CmdFindNum】按钮单击事件中加入如下代码。

  1. Private Sub CmdFindNum_Click()
  2.   '申明自定义类
  3.   Dim MyFindNum As 提取数字
  4.   Dim strOut As String
  5.   
  6.   '实例化"提取数字类"对象
  7.   Set MyFindNum = New 提取数字
  8.   '将函数输出结果赋值给自定义字符串变量
  9.   strOut = MyFindNum.fFindNumber(Text0)
  10.   
  11.   '在消息框中显示
  12.   MsgBox "你提取的数字为:" & strOut, vbInformation, "江羽提示:"
  13. End Sub
复制代码

点击保存后,你就可以运行一下窗体测试你的成果了
M 本文实例见实例包,下载测试如果提示错误,请重新对自定义类库进行引用。
本文只是通过一个简单的实例演示了,如何通过VB封装一般的VBA中代码,因为该代码中并未涉及到ACCESS应用程序对象,所以在VB中没有对ACCESS对象类库进行引用,另外实例中只是简单演示了,如何手动实现对DLL的注册引用,在后续文章中我将就如何实现DLLACCESS应用程序对接及DLL的自动注册及引用结合实例进行讲解。
                                                                                            
           江羽  2010-05-16   

实例及Word文稿:
游客,如果您要查看本帖隐藏内容请回复

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

点击这里给我发消息

4#
发表于 2010-11-3 20:06:17 | 只看该作者
很经典的教程!! 值得学习.
5#
发表于 2010-11-3 20:14:50 | 只看该作者
向高手致敬学习...
6#
发表于 2010-11-4 05:25:14 | 只看该作者
教程看了很清除,谢谢!
7#
发表于 2010-11-4 08:01:49 | 只看该作者
谢谢分享
学习学习
8#
发表于 2010-11-7 20:53:48 | 只看该作者
版主确实厉害
9#
发表于 2010-11-16 22:08:03 | 只看该作者
学习
10#
发表于 2010-11-17 00:02:06 | 只看该作者
谢谢分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-4-20 04:18 , Processed in 0.108048 second(s), 37 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表