目录
一.dll的简介
1.dll被称为动态链接库,是一个可由多个程序或其他dll调用用的代码和的库,使用dll可以让程序可以更加模块化,避免重复代码中出现。
2.vb6的dll可以包括过程和函数,函数具有返回值,过程则没有。
3.当程序调用dll ,就会产生依赖项,在dll被删除后,调用dll函数的代码就会报错。
二.VB6中的dll
1.常见的调用的方法:
(1).静态调用:
方法:Private/public Declare Sub 方法名 Lib "dll名" (方法的参数)
函数:Private/public Declare function 函数名 Lib "dll名" (方法的参数)
举个栗子:
方法:Private Declare Sub Sleep Lib "kernel32.DLL" (ByVal dwMilliseconds As Long)
函数:Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vkey As Long)
(2).通过引用窗口调用 :
点击工程--引用即可打开引用窗口,找到想要调用的dll,点击确定即可,通过这个方法可以调用dll中的所有函数和过程。调用方法如下图所示
mathv3.dll为写好的dll。
2.通过vb6写dll:
(1).在vb6新建窗口新建一个ActiveX DLL。
(2).将class中的Instance属性设置为6,这个属性是决定这个类能不能公共化。
(3).编写代码,定义过程和函数如代码所示:
Private Declare Sub Sleep Lib "kernel32.DLL" (ByVal dwMilliseconds As Long) '调用kernel32.dll的sleep的方法 Function Flashbacks(number As Long) As Long '返回倒序数 For i = Len(number) To 1 Step -1 Flashbacks = Flashbacks & Mid(number, i, 1) Next End Function Sub yc(sleeptime As Long) '调用系统api的延迟 Sleep sleeptime End Sub在dll工程,点击文件---生成dll,即可生成新的dll
3.dll的调用
(1).创建新的工程
(2).通过1.常见的调用的方法:的方法调用dll,注意:原工程名不能与工程一致
(3).编写代码:
Private Sub Form_Click() yc 1000 Debug.Print Flashbacks(321) End Sub点击运行,单击窗体大约一秒后观察立即窗口显示123,如图所示:
三.出现的一些问题:
1.问题:将刚才编写的代码生成exe,在本机发现运行正常,但使用虚拟机模拟新的环境,发现报错,Runtime error没有注册类,分析:这种情况是dll没有注册出现的
解决方法:(1)打开任务管理器--详细信息--运行新任务--勾选以管理员模式运行,输入cmd以管理员模式运行,在cmd命令提示符,cd /d 切换到dll在的目录,regsvr32 dll文件名。(2).对话框提示dllregsvristrserver已注册成功,即可,流程如图所示。
这时再运行刚刚生成的exe,发现可以正常运行了
2.问题:运行exe,发生报错,Runtime error自动化错误,分析:这种情况是dll文件丢失或dll引用的冲突导致,分为两种,一种是dll名冲突,另外一种是老旧版本冲突
解决方法:检查dll是否丢失,若无丢失,参考方法1重新注册dll即可。
3.问题:打开vb工程,运行程序,发生报错Runtime error自动化错误,分析:这种情况可能是引用的dll和注册的dll不匹配,也有可能是文件丢失与问题2类似解决方法:检查dll是否丢失,若无丢失,参考方法1重新注册dll或引用正确的dll即可。