ImageVerifierCode 换一换
格式:DOC , 页数:18 ,大小:442KB ,
资源ID:7775207      下载积分:10 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/7775207.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(VB封装DLL实例讲解access.doc)为本站上传会员【pc****0】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

VB封装DLL实例讲解access.doc

1、VB封装DLL实例讲解(一) 一、 DLL基本概念 (一)概念 DLL即动态链接库(Dynamic Link Library),是由可被其它程序调用的函数集合组成的可执行文件模块。DLL不是应用程序的组成部分,而是运行时链接到应用程序中。 (二)主要优点: 1、多个应用程序可以共享一个DLL,而且当多个应用程序调用库的同一个函数时,可执行文件中装入的只是该函数的内存地址,从而节省内存和磁盘空间; 2、使用动态链接库易于我们维护用户程序,即使对动态链接库进行修改也不会影响用户程序; 3、从ACCESS角度而言,还可以更好的确保核心代码的安全。 二、 用VB封装VBA代

2、码,构建自定义的DLL动态链接库 (一)ACCESS中实例代码 下面是一个“快速提取字符串中数字.mdb”实例(该实例在文件包中),单击“提取结果”按钮,将文本框中的数字在弹出消息显示出来。 我将就这个实例演示如何将该实例VBA代码封装成为DLL。 ? 按钮单击事件代码如下: Private Sub CmdFindnumber_Click() Dim strM As String '初始字符串 Dim strOut As String '输出字符串变量 Dim I strM = Me.Text1 '从第一个字符向最

3、后一个字符循环,以提取每个字符 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编辑窗中,点菜单【文件

4、新建工程】,打开新建工程窗口 1、点选ActiveX DLL 2、点确定 步骤二:修改工程名,这即生成的DLL库名 1、修改工程名为:我的动态库 步骤三:修改类名 1、改类名为:提取数字 步骤四:在代码窗口输入如下代码。将ACCESS中的单击事件代码,略做修改成为一个公用函数,然后复制到VB代码编辑窗口 ?代码如下 '将这前的ACCESS代码改成一个公用函数 '输入:strPutString 字符串变量,需分离数字的字符串 '输出: fFindNumber字符串变量,得到的数字字符 Publ

5、ic 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,

6、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】

7、打开VBE窗口,点菜单【工具】-【引用】,打开引用对话框,完成对我们自己编译的DLL的引用。 2、选择引用的DLL 3、点打开 1、点浏览 4、点确定 (三)在【CmdFindNum】按钮单击事件中加入如下代码。 Private Sub CmdFindNum_Click() '申明自定义类 Dim MyFindNum As 提取数字 Dim strOut As String '实例化"提取数字类"对象 Set MyFindNum = New 提取数字 '将函数输出结果赋值给自定义字符串变量 s

8、trOut = MyFindNum.fFindNumber(Text0) '在消息框中显示 MsgBox "你提取的数字为:" & strOut, vbInformation, "江羽提示:" End Sub 点击保存后,你就可以运行一下窗体测试你的成果了 M 本文实例见实例包,下载测试如果提示错误,请重新对自定义类库进行引用。 本文只是通过一个简单的实例演示了,如何通过VB封装一般的VBA中代码,因为该代码中并未涉及到ACCESS应用程序对象,所以在VB中没有对ACCESS对象类库进行引用,另外实例中只是简单演示了,如何手动实现对DLL的注册引用,在后续文

9、章中我将就如何实现DLL与ACCESS应用程序对接及DLL的自动注册及引用结合实例进行讲解。 江羽 2010-05-16晚 VB封装DLL实例讲解(二) 上文中我们已经就DLL的基本概念,以及如何将VBA代码封装为DLL,如何引用该生成的DLL动态链接库,进行了初步的讲解,我想大家对于VB封装DLL应该有了一个初步的了解。 下面主要就DLL如何实现对ACCESS对象进行封装方法进行探讨。 一、如何在VB中实现对ACCESS对象编程 (一)在VB中引用ACCESS对

10、象类库 我们要通过编译DLL来实现对ACCESS对象的封装,首先必须在VB中引用ACCESS对象类库,这样我们就可以在VB中,实现对ACCESS应用程序中的对象进行编程。 打开VB编辑窗口,点菜单【工程】-【引用】,打开【引用对话框】,点选“Microsoft Access 11.0 Object Library”完成对当前版本ACCESS应用程序对象的引用。(实例演示版本为ACCESS 2003) 库文件所在路径 1 钩选ACCESS对象库 2 点击确定 M 对ACCESS对象库的引用很关键,否则我们无法实现对ACCESS对象的编程 (二)了解ACCESS对象模

11、型 在VB中要对ACCESS对象进行编程,还必需对ACCESS所提供的各项对象有一定了解,因为VB就是通过ACCESS对象的方法与属性,来完成各项操作与设置,下图为ACCESS 2003 的对象部分模型图例。 P 上图为ACCESS 2003对象模型,因为篇幅的问题,文中只显示模型中部分对象,要了解全部对象模型,请大家参阅帮助。 (三)VB编程中ACCESS VBA与VB对象表述区别 1、ACCESS VBA与VB的顶层对象都为Application ,但在编程中ACCESS VBA顶层对象表述为:Application,而在VB编程中顶层对象用简写:App

12、表述(到VB.NET又改回了Application)。 ? 例程:在VB编程中获得VB及ACCESS VBA获取当前路径实例: '在VB中获得当前路径: App.Path '在VB中获得ACCESS的当前路径: Application.CurrentProject.Path P 在office各应用程序之间调用各组件时,通常在对象前加上库名,如:Access.Application来表述,但因为VB与ACCESS顶层对象原本表述就存在区别,在VB中可以直接用Application表述ACCESS应用程序对象,并不会产生冲突的问题。 2、ACCESS VBA和VB中部分预定

13、义类对象(如:窗体、控件等)表述基本相同,以“标签控件”为例,VB与ACCESS VBA均为Label,在VB编程中为了与ACCESS预定义类对象加以区别,ACCESS标签对象通常用ACCESS.Label表述。 ? 例程:在VB编程中定义VB及ACCESS标签控件对象实例: '在VB中定义VB标签对象: Dim m_Label As Label '在VB中定义ACCESS标签对象: Dim m_Label As Access.Label M 在进行DLL编程时,特别需注意对象表述区别的问题,否则无法编译或是编译后在ACCESS调用中报错。 (四)VB编程中关于ACCES

14、S VBA专属常量 ACCESS VBA专属常量以“ac”开头,如:控件类(AcControlType)中的文本控件常量为acTextBox,这些常量不一定能被VB所识别,解决办法通常不使用“常量名”,而直接使用“常量值”,或以输入参数方式传递的方法来解决。 ? 例程:实现隐藏所有文本控件。acTextBox常量值为109。 Dim ctl As Access.Control '申明ACCESS控件对象 Dim frmClt As Access.Controls '申明ACCESS控件集合 '遍历所有ACCESS控件集合,如为文本控件,则

15、不显示该控件 For Each ctl In frmClt.Controls '文本控件类常量值为109,以常量值替代acTextBox常量名 If ctl.ControlType = 109 Then ctl.Visible = False Next P 你可以通过帮助查阅ACCESS专属常量值,也可以在ACCESS VBA中通过程序方式获取,如:在立即窗口输入:?acTextBox回车,就可以acTextBox常量值为:109。 二、DLL封装ACCESS对象实例演示   (一)ACCESS的MDB实例 MDB实例演示获得ACC

16、ESS版本信息,并在标签Label0中显示(见下图),具体参看实例中frmVer6窗体中的代码,及类模块ClsVeresion中代码。 P mdb实例中frmVer1-frmVer6各窗体中具体演示了,代码按DLL封装需要整理的思路。       ? 例程:frmVer6窗体加载事件代码 Private Sub Form_Load() '申明自定义类的实例 Dim m_Ver As New ClsVeresion m_Ver.objAddItem Label0 '调用自定义类的objAddItem方法 End Sub

17、 ? 例程:ClsVeresion类模块代码 '程序功能:定义类接口,将版本信息输出并在标签中显示 Public Sub objAddItem(m_label As Label) m_label.Caption = AppVersion End Sub '函数功能:输出ACCESS版本信息 Private Function AppVersion() As String Dim strVer As String '定义字符串变量 '将版本号

18、赋值给字符串变量 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"

19、 Case "12.0" AppVersion = "Access 2007" End Select End Function (二)DLL的封装ACCESS对象实现 1、打开VB6.0编辑器,点菜单【新建工程】,在【新建工程】对话框中,点选【ActiveX DLL】,点【确定】。 2、修改工程名及类名,实例中我定义的工程名:GetAccVer ,类名:ClsAccVer ,修改完成以后点选菜单【保存】工程 (见下图)。 P 工程名就是我们后面将引用的DLL库名,类模块名为代码中我们申明的类名。 3、点菜单【工程】-【

20、引用】,打开【引用对话框】,点选“Microsoft Access 11.0 Object Library”完成对当前版本ACCESS应用程序对象的引用。 4、将MDB中类模块ClsVeresion代码复制到VB中ClsAccVer类模块中,按前面我们所述的VB中实现ACCESS对象编程的注意要点略做修改。(见下图划红线部分) P 1、因为VB与ACCESS VBA 中标签类对象都为Label,因此加上库名(Access.Label)加以区别; 2、因为VB与ACCESS VBA顶层应用程序对象,表述原本就有区别,所以无需特别区分。 ? 例程:ClsAccV

21、er类模块代码 '程序功能:定义DLL接口,将版本信息输出并在标签实例中显示 Public Sub objAddItem(m_label As Access.Label) m_label.Caption = AppVersion End Sub '函数功能:输出ACCESS版本信息 Private Function AppVersion() As String Dim strVer As String '定义字符串变量 '将版本号赋值给字符串变量 strVer = Application.Version '根据版

22、号输出对应版本信息 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"

23、 End Select End Function 4、编译DLL,点菜单【文件】-【GetAccVer.dll】动态链接库,封装DLL就完成了。 你现在可以在ACCESS中引用该DLL测试一下看看成果了。参看实例中frmVer7窗体,如实例引用报错,请重新引用GetAccVer.dll即可。 因为本人认知及文字水平所限,不免有错漏之处,还请大家斧正。本文的Word文稿、VB源码、MDB实例均在实例包中。在后文中我们主要就动态链接库引用的方法和技巧结合实例进行探讨。 江羽 2010-05-30午 VB封装DLL实例讲解(三)

24、 一、手动注册及引用 (一)手动注册及引用方法(参看实例:手动引用.mdb) 进入VBA编辑窗口,点菜单【工具】—【引用】,打开【引用】对话框,点【浏览】按钮,打开【添加引用】对话框,点选要引用的DLL(测试实例为:ClsFindString.dll),点【打开】—点【确定】,我们完成动态链接库的手动注册及引用。 1 点浏览按钮 2 点选DLL 3 点打开按钮 4 点确定按钮 (二)手动注册及引用方法不足及问题 手动注册引用优点是不言而喻的,方便简捷,易于操作。但在实际运用中,当我们在其他电脑上发布应用程序,或运行我们测试好的应用程序时,却会出现错误提示,程序无法

25、正常运行。 错误(一):找不到工程或库(见下图) 错误的主要原因:DLL在当前运行的电脑系统中没有注册信息,而且引用不正确。 错误(二):引用的动态链接库(DLL)丢失(见下图) 进入到VBA编辑窗口,点菜单【工具】—【引用】,打开【引用】对话框,我们会看到之前引用的DLL动态链接库丢失。 错误的主要原因:系统无法找到原路径引用DLL。 错误(三):自动化错误(见下图) 错误的主要原因:我们在发布应用程序的电脑或系统中,虽然重新完成DLL手动注册和引用,但如果DLL路径再次改变,运行程序时就会出现“自动化错误”提示。 错误(四):ActiveX部件不

26、能创建对象(见下图) 错误的主要原因:应用程序已正常引用DLL动态链接库,但其册注信息丢失或者没有正常注册,就会出现以下问题。 (三)解决上述错误方法 1、解决错误方法,当然是重新进行DLL的手动注册及引用,具体步骤参下图。但这只是治标不治本的办法,不利于对外发布我们的应用程序,最好的办法还是通过VBA自动完成DLL的注册及引用。 1 去除丢失DLL钩选 5 点确定按钮 4 点打开按钮 3 点选DLL 2 点浏览按钮 二、自动注册及引用DLL方法 在探讨如何实现DLL自动注册及引用之前,我们必须清楚一点,那就是DLL的注册与引用并不是同一

27、事件或行为的两种不同表述,而是两种不同的动作。 ² DLL注册 是指将DLL的相关信息,如:DLL唯一识标号(GUID),版本号(Version)及路径(Path)信息写入注册表中,以供系统对DLL进行识别调用。 我们通过VB编译生成DLL时,VB一般会自动完成对该DLL的注册,但如果要在其它电脑上运行程序时,我们就必须重新对该DLL进行注册。 ² DLL引用 是指将DLL类库对象集成到代码编辑环境中,以便编程时调用类库中的对象、属性及方法。 我们通过手动方式完成DLL的引用时,系统会自动完成对该DLL的注册,所以我们无需另行对DLL进行注册,但如果我们在其它电脑上运行程序

28、时,还会出现我们在之前章节中所述的错误。 (一)DLL自动注册方法 我们可以通过 Regsvr32.exe 来进行DLL注册或反注册,具体的语法及参数: 语法: Regsvr32 [/u] [/n] [/i[:cmdline]] dllname 说明:其中dllname为DLL文件名,建议在发布时将DLL复制到system文件夹下。 参数: 参数 说明 /u 反注册 /s 指定regsvr32安静运行,且不显示任何消息框。 /n 指定不调用DllRegisterServer。此选项必须与/i共同使用。 /i:cmdline 调用DllInstall 将它传

29、递到可选的 [cmdline]。在与/u共同使用时,它调用dll卸载。 dllname 指定要注册的dll文件名。 1.1 示例通过Shell运行Regsvr32程序完成DLL注册  Shell "Regsvr32 /S " & Chr(34) & CurrentProject.Path & "\ClsFindString.dll" & Chr(34) Shell 函数 用以运行Regsver32程序 Regsver32 注册程序 /S 注册程序参数,书写时记得参数前后必须留

30、空 Chr(34) Chr函数,获指定代码字符,Chr(34)为引号 CurrentProject.Path DLL当前路径 ClsFindString.dll 演示实例DLL名 1.2 示例通过Shell运行Regsvr32程序反注册  Shell "Regsvr32 /U /S " & Chr(34) & CurrentProject.Path & "\ClsFindString.dll" & Chr(34) 我们可以将注册语句放在窗体的加载事件,自动完成DLL的注册,具体可以参看实例。但如果我们有多个DLL需要批量注册时,

31、可以考虑通过软件打包发布工具来完成DLL的注册工作;也可以事先编写BAT文件,让打包发布时将该BAT文件一并打包发布,安装时运行该BAT文件,来完成N个DLL的批量注册,在些就不多着笔墨,大家可以参看实例包中的BAT文件实例。 (二)DLL自动引用方法 2.1 通过References对象的AddFromFile方法实现自动引用 Dim ref As Reference '申明引用类对象 On Error Resume Next '避免因重复引用造成的错误提示 '实例化引用对象,完成DLL的引用 Set ref = References.AddFromFile(Cur

32、rentProject.Path & "\ClsFindString.dll") 为了避免因重复引用出现的错误,我们可以如上代码中加入Error语句,我们还可以在应用程序退出时,通过对References 对象的Remove 方法释放DLL或反引用。 Dim ref As Reference '申明引用类对象 '实例化反引用对象 Set ref = References("ClsFindString") '移除引用指定类库 References.Remove ref 说明:根据本人实践,我个人倾向于使用Error语句,因为如果应用程序非正常退出,引用对象没有反

33、引用成功,启动时就难免出现重复引用的错误问题。 2.2 通过DLL唯一标识号实现自动引用 Dim ref As Reference '申明引用类对象 On Error Resume Next '避免因重复引用造成的错误提示 '唯一标识号完成注册,需要DLL标识号,主版本号,次版本 Set ref = References.AddFromGuid("{C5E340E2-C557-4852-AE83-5A0578B6863B}", 1, 0) DLL的标识号是编译生成时就确定了的,这个标识号就是DLL的终生制身份证号,我们可以通过这个唯一标识号来完成DLL自动引用

34、但此种方法必须具备两个条件,一是DLL已经成功注册,二是我们知道了该DLL的标识号、主版本号、次版本号。 2.2.1获取DLL标识号、主版本号、次版本号方法 Dim ref As Reference '申明引用类对象 '实例化引用类库对象 Set ref = References.AddFromFile(CurrentProject.Path & "\ClsFindString.dll") Debug.Print ref.GUID '获得DLL唯一标识号 Debug.Print ref.Major '获得主版本号 Debug.Print ref.Mino

35、r '获得次版本号 2.3通过CreateObject方法实现自动引用 Dim DllFindStr As Object '申明对象 '实例化对象为创建的DLL类库对象 'ClsFindstring为DLL库名,clsFindStr为DLL类名 Set DllFindStr = CreateObject("ClsFindstring.clsFindStr") DllFindStr.sFindStr Text2, Me.Text0 '调用DLL类库方法,运行程序 Set DllFindStr = Nothing '释放对象 根据我本人实践经验,CreateObject方法自动引用是最为便捷高效的方法,仅供参考。 关于DLL相关自动注册及引用方法就探讨这里,以上文字仅是本人实践的一点总结,希望对大家有所帮助,如有错漏之处还请大家斧正。本文的Word文稿、DLL源码(含DLL)、mdb演示实例及BAT注册文件实例均在实例包中。 江羽 2010-06-01晚

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服