Office中国论坛/Access中国论坛
标题: VB封装DLL实例讲解(一) [打印本页]
作者: tanhong 时间: 2010-11-3 18:39
标题: VB封装DLL实例讲解(一)
本帖最后由 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。
[attach]43984[/attach]
? 按钮单击事件代码如下:
- Private Sub CmdFindnumber_Click()
- Dim strM As String '初始字符串
- Dim strOut As String '输出字符串变量
- Dim I
-
- strM = Me.Text1
- '从第一个字符向最后一个字符循环,以提取每个字符
- For I = 1 To Len(strM)
- '判断是否为0到9字符,是则赋值输出
- If Mid(strM, I, 1) Like "[0-9]" Then
- strOut = strOut & Mid(strM, I, 1)
- End If
- Next I
- '用MsgBox函数进行输出测试
- MsgBox strOut
- End Sub
复制代码 M 以上代码还不能直接用于封装,须将其修改成为公用函数(过程)
(二)VB封装实例中VBA代码
步骤一:在VB编辑窗中,点菜单【文件】-【新建工程】,打开新建工程窗口
[attach]43986[/attach]
作者: tanhong 时间: 2010-11-3 18:44
本帖最后由 tanhong 于 2010-11-3 21:26 编辑
步骤二:修改工程名,这即生成的DLL库名
步骤三:修改类名
作者: tanhong 时间: 2010-11-3 18:45
本帖最后由 tanhong 于 2010-11-3 21:21 编辑
步骤四:在代码窗口输入如下代码。将ACCESS中的单击事件代码,略做修改成为一个公用函数,然后复制到VB代码编辑窗口
?代码如下
- '将这前的ACCESS代码改成一个公用函数
- '输入:strPutString 字符串变量,需分离数字的字符串
- '输出: fFindNumber字符串变量,得到的数字字符
- Public Function fFindNumber(strPutString As String) As String
- Dim strOut As String '输出字符串变量
- Dim I
-
- '从第一个字符向最后一个字符循环,以提取每个字符
- For I = 1 To Len(strPutString)
- '判断是否为0到9字符,是则赋值输出
- If Mid(strPutString, I, 1) Like "[0-9]" Then
- strOut = strOut & Mid(strPutString, I, 1)
- End If
- Next I
- '数字输出
- fFindNumber = strOut
- End Function
复制代码
步骤五:编译DLL,点菜单【文件】-【生成我的动态库.dll】,VBA代码封装DLL就完成了。
三、在mdb中调用自定义DLL动态链接库
(一)新建数据库及窗体
新建【快速提取数字(DLL)实例.mdb】数据库,新建一个窗体【frmMain】,在窗体添文本框【text0】,按钮【CmdFindNum】,Caption属性:“提取数字”(见下图)
(二)引用【我的动态库.dll】库
按【Alt+F11】打开VBE窗口,点菜单【工具】-【引用】,打开引用对话框,完成对我们自己编译的DLL的引用。
(三)在【CmdFindNum】按钮单击事件中加入如下代码。
- Private Sub CmdFindNum_Click()
- '申明自定义类
- Dim MyFindNum As 提取数字
- Dim strOut As String
-
- '实例化"提取数字类"对象
- Set MyFindNum = New 提取数字
- '将函数输出结果赋值给自定义字符串变量
- strOut = MyFindNum.fFindNumber(Text0)
-
- '在消息框中显示
- MsgBox "你提取的数字为:" & strOut, vbInformation, "江羽提示:"
- End Sub
复制代码
点击保存后,你就可以运行一下窗体测试你的成果了
M 本文实例见实例包,下载测试如果提示错误,请重新对自定义类库进行引用。
本文只是通过一个简单的实例演示了,如何通过VB封装一般的VBA中代码,因为该代码中并未涉及到ACCESS应用程序对象,所以在VB中没有对ACCESS对象类库进行引用,另外实例中只是简单演示了,如何手动实现对DLL的注册引用,在后续文章中我将就如何实现DLL与ACCESS应用程序对接及DLL的自动注册及引用结合实例进行讲解。
江羽 2010-05-16 晚
实例及Word文稿:
作者: tmtony 时间: 2010-11-3 20:06
很经典的教程!! 值得学习.
作者: fnsmydyang 时间: 2010-11-3 20:14
向高手致敬学习...
作者: li08hua 时间: 2010-11-4 05:25
教程看了很清除,谢谢!
作者: xuwenning 时间: 2010-11-4 08:01
谢谢分享
学习学习
作者: yori2007 时间: 2010-11-7 20:53
版主确实厉害
作者: STD 时间: 2010-11-16 22:08
学习
作者: c101 时间: 2010-11-17 00:02
谢谢分享
作者: xie62 时间: 2010-11-17 07:29
谢谢分享
学习学习
作者: hgxly 时间: 2010-11-29 14:05
值得学习,O(∩_∩)O谢谢
作者: roych 时间: 2010-12-5 18:54
哎,没装VB编辑器能不能用啊?
作者: LeeTien 时间: 2010-12-5 19:55
VB不能直接编译带输出DLL文件
微软做了限制了
作者: tanhong 时间: 2010-12-8 21:51
LeeTien 发表于 2010-12-5 19:55
VB不能直接编译带输出DLL文件
微软做了限制了
是有此一说,不过我的测试是没问题,不信你也可以试试
作者: LeeTien 时间: 2010-12-9 10:29
没有试过我是不会下结论的
楼主用的什么版本VB能给个下载地址吗
作者: tanhong 时间: 2010-12-10 12:46
我这个版可以,我可以发一个给你.
作者: sishenzaixian 时间: 2011-2-18 09:20
不简单哦
作者: 刘志文 时间: 2011-2-28 22:22
谢谢版主分享
作者: yazzzing 时间: 2011-4-14 11:08
EXCEL能用这个办法加密吗。感谢了啊!
作者: changjhjn666 时间: 2011-4-14 11:44
终于找到教程了,谢谢
作者: js7756 时间: 2011-5-2 00:45
很经典的教程!! 值得学习.
作者: yy138360 时间: 2011-5-2 21:15
先谢谢了
作者: benli7600689 时间: 2012-11-3 22:59
我来学习
作者: yanghua1900363 时间: 2012-11-4 08:18
谢谢分享!
作者: ~波波~ 时间: 2013-2-21 18:50
强
作者: shouan 时间: 2013-6-2 14:49
学习ing
作者: zezhza 时间: 2013-6-6 07:24
谢谢分享
学习学习
作者: littlekey 时间: 2013-7-30 20:56
感谢分享。
作者: 岭南王子 时间: 2013-9-10 19:42
感谢分享!佩服版主!
作者: leonshi 时间: 2013-11-2 16:53
学习借鉴
作者: 馨语馨愿 时间: 2014-4-28 22:11
谢谢楼主分享
作者: msyangyi 时间: 2014-5-15 17:06
又是一精品,谢谢
作者: jonical 时间: 2014-5-22 17:10
学习中 谢谢
作者: 百舸争流 时间: 2016-4-26 22:17
很好的例子。
作者: bcgh 时间: 2017-1-18 16:48
学习一下,谢谢分享。
作者: GOODWIN 时间: 2021-10-26 19:59
谢谢分享,这个值得学习
作者: yancx 时间: 2022-1-7 13:58
学习
作者: yancx 时间: 2022-1-7 14:36
学习
欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) |
Powered by Discuz! X3.3 |