vb编写DLL学习
VB DLL实例分步讲解
![VB DLL实例分步讲解](https://img.taocdn.com/s3/m/b9647b2f4b35eefdc8d333c5.png)
VB封装DLL实例讲解(一)一、DLL基本概念(一)概念DLL即动态链接库(Dynamic Link Library),是由可被其它程序调用的函数集合组成的可执行文件模块。
DLL不是应用程序的组成部分,而是运行时链接到应用程序中。
(二)主要优点:1、多个应用程序可以共享一个DLL,而且当多个应用程序调用库的同一个函数时,可执行文件中装入的只是该函数的内存地址,从而节省内存和磁盘空间;2、使用动态链接库易于我们维护用户程序,即使对动态链接库进行修改也不会影响用户程序;3、从ACCESS角度而言,还可以更好的确保核心代码的安全。
二、用VB封装VBA代码,构建自定义的DLL动态链接库(一)ACCESS中实例代码下面是一个“快速提取字符串中数字.mdb”实例(该实例在文件包中),单击“提取结果”按钮,将文本框中的数字在弹出消息显示出来。
我将就这个实例演示如何将该实例VBA代码封装成为DLL。
按钮单击事件代码如下:Private Sub CmdFindnumber_Click()Dim strM As String '初始字符串Dim strOut As String '输出字符串变量Dim IstrM = Me.Text1'从第一个字符向最后一个字符循环,以提取每个字符For I = 1 To Len(strM)'判断是否为0到9字符,是则赋值输出If Mid(strM, I, 1) Like "[0-9]" ThenstrOut = strOut & Mid(strM, I, 1)End IfNext I'用MsgBox函数进行输出测试End Sub以上代码还不能直接用于封装,须将其修改成为公用函数(过程)(二)VB 封装实例中VBA 代码步骤一:在VB 编辑窗中,点菜单【文件】-【新建工程】,打开新建工程窗口步骤二:修改工程名,这即生成的DLL 库名步骤三:修改类名步骤四:在代码窗口输入如下代码。
(原创)VS2019VB如何生成DLL文件,调用DLL
![(原创)VS2019VB如何生成DLL文件,调用DLL](https://img.taocdn.com/s3/m/cdf3e92e5627a5e9856a561252d380eb62942380.png)
(原创)VS2019VB如何⽣成DLL⽂件,调⽤DLL ⼀。
⽣成DLL1.打开VS2019,--->"创建新项⽬"------>"类库(NET Framework)---->下⼀步2. 输⼊项⽬名称:bell,3. 输⼊保存位置:D:\4. 点击右下⽅“创建”5.输⼊如下代码:Public Class LearnDLLFunction ABC()ABC = "你好!我学学怎么建⽴DLL⽂件,并怎么调⽤。
"End FunctionEnd Class5.按F5或启动------> "确定"6.这时,在如下⽂件夹中就⽣成了:D:\BELL\bin\Debug\BELL.dll⼆.调⽤dll⽂件1.在vs2019中新建window窗体应⽤程序2. 输⼊项⽬名称:WindowsApp13. 输⼊保存位置:D:\4. 点击右下⽅“创建”5.在窗体Form1中,添加Textbox1控件:6.项⽬----添加引⽤7. 浏览 D:\BELL\bin\Debug\BELL.dll---->添加8.在BELL.DLL前打对号----->确定9.双击Form1窗体,在代码页输⼊⼀下代码:Public Class Form1Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.LoadDim Goodmood As New BELL.LearnDLLTextBox1.Text = goodmood.ABCEnd SubEnd Class10,编译运⾏。
(完整版)Vb写dll基础
![(完整版)Vb写dll基础](https://img.taocdn.com/s3/m/aed672f4168884868662d658.png)
Visual Basic 编写DLL
编写一个简单的DLL
打开VB6.0,新建工程 选择ActiveX DLL
修改工程名,工程名将决定生成的DLL的名称,这里顺便把自动生成的类的名称也修改
在类中添加一个方法(sub,或function )来测试这个DLL
生成一个DLL
调用这个DLL
再新建一个Exe工程
在这个Exe工程里找到并引用刚才生成的DLL
在Exe工程里使用
生成Exe文件,并关闭Exe工程,运行此Exe文件,点击测试DLL
运行效果
关闭Exe,修改DLL工程的属性,并修改DLL的clsTest1.MyMsgbox 方法
重新编译生成新的DLL,并再次运行刚才的Exe文件,点击测试DLL 查看效果:
这说明一点,通过DLL我们不需要重新编写编译Exe文件,只要重新编译DLL文件即可在实际编程中,各个DLL各司其职,组成功能强大,分工明确的软件
比如QQ旋风
DLL公开函数、方法(直接调用,就像调用公共模块中的公共函数一样)
新建一个DLL,命名为test2,并设置自动生成的Class1 的Instancing 属性为
6- GlobalMultiUse(这个类的各种属性和方法可以象简单的全局函数那样被调用。
该类的实例不需要显式创建,因为它会自动创建。
)
我们在这个Class1 中写入一个函数
生成DLL文件
再新建一个Exe工程,并引用这个DLL,然后调用这个DLL的函数进行测试
运行效果:。
在vb中生成dll文件并且调用的方法.
![在vb中生成dll文件并且调用的方法.](https://img.taocdn.com/s3/m/8541457d0a1c59eef8c75fbfc77da26925c596da.png)
在vb中生成dll文件并且调用的方法.一、DLL制作1.打开新建工程2.选择“Active DLL”,单击“打开”按钮。
3.单击打开按钮后,系统在工程中添加一类模块。
4.为方便对DLL的引用可以改一下名称,如将类模块的名称改为Fraction。
5.在本类模块中添加代码如下。
Option ExplicitPublic NumPublic DenPublic Sub Add(NUm2, Den2)Num = NUm2 + Den2End SubPublic Sub Sbt(NUm2, Den2)Num = NUm2 - Den2End SubPublic Sub Mul(NUm2, Den2)Num = NUm2 * Den2End SubPublic Sub Div(NUm2, Den2)Num = NUm2 / Den2End Sub6.为与其他工程相区别,可将本工程命名为“Math”。
7.生成DLL文件。
二、DLL引用1.建立一个普通窗体。
2.添加引用。
3.在程序中添加以下代码。
Option ExplicitPublic Frac As New Fraction Private Sub Command1_Click() Frac.Add Val(Text1.Text), Val(Text2.Text) Text3.Text = Frac.NumEnd SubPrivate Sub Command2_Click() Frac.Sbt Val(Text1.Text), Val(Text2.Text) Text3.Text = Frac.NumEnd SubPrivate Sub Command3_Click() Frac.Mul Val(Text1.Text), Val(Text2.Text) Text3.Text = Frac.NumEnd SubPrivate Sub Command4_Click() Frac.Div Val(Text1.Text), Val(Text2.Text) Text3.Text = Frac.NumEnd SubPrivate Sub Command5_Click()Text1 = ""Text2 = ""Text3 = ""End Sub 4.运行程序。
VB开发DLL
![VB开发DLL](https://img.taocdn.com/s3/m/e7e767d3ba4cf7ec4afe04a1b0717fd5360cb2bd.png)
在动态链接技术中,模块和程序是分离的,模块独立于程序而存在于另一个分离的dll 文件中,这个dll 文件是动态链接到程序中的。
文件是动态链接到程序中的。
那如何在vb 中编写一个DLL 程序呢?程序呢?首先,新建一个工程,然后先中“Ac veX Dll ”工程。
”工程。
然后开始编辑,往程序中添加你需要的部件和控件。
然后开始编辑,往程序中添加你需要的部件和控件。
编辑完成后,保存工程,工程一般是以“.vbp ”文件保存,定义的类以“.cls ”和“.vbw ”文件保存,窗体以“.frm ”文件保存,添加的模块一“.bas ”文件保存……。
接着选择“文件”菜单,弹出下拉框,选中“生成.dll ”选项,它就会在上面弹出一个进度条“正在生成.dll 文件”。
生成以后是一个有好象齿轮状的图标。
生成以后是一个有好象齿轮状的图标。
当你需要在其他的程序中调用这个dll 的时候,需要在系统中注册一下,具体的过程是开始->运行->打开”C:”C:\WINDOWS\system32\\WINDOWS\system32\\WINDOWS\system32\regsvr32.exe”regsvr32.exe”,然后找到你要注册的控件的路径,添加在regsvr32.exe 的后面。
的后面。
如果你要引用,就开一个“标准EXE ”工程,然后在“工程”选项中,单击“引用”,找到你刚才的“.dll ”的文件名,在前面的复选框中打勾,就可以引用你刚才在那里面写的方法等。
方法等。
Public Func on DllMain(hinstDLL As Long, // long 类型包含dll 的instance handle 句柄. 也是dll 的模块句柄的模块句柄 fdwReason As Long, // 常数标识,入口点为何被调用常数标识,入口点为何被调用lpwReserved As Long //long 类型提供关于类型提供关于 DLL_PROCESS_ATTACH(DETACH)的信息的信息 ) As BooleanfdwReason 通常的取值通常的取值DLL_PROCESS_ATTACH (1)进程装载了dll ,每进程初始化要执行。
Vb写dll基础
![Vb写dll基础](https://img.taocdn.com/s3/m/039fd494e53a580216fcfe9d.png)
Visual Basic 编写DLL
编写一个简单的DLL
打开VB6.0,新建工程 选择ActiveX DLL
修改工程名,工程名将决定生成的DLL的名称,这里顺便把自动生成的类的名称也修改
在类中添加一个方法(sub,或function )来测试这个DLL
生成一个DLL
调用这个DLL
再新建一个Exe工程
在这个Exe工程里找到并引用刚才生成的DLL
在Exe工程里使用
生成Exe文件,并关闭Exe工程,运行此Exe文件,点击测试DLL
运行效果
关闭Exe,修改DLL工程的属性,并修改DLL的clsTest1.MyMsgbox 方法
重新编译生成新的DLL,并再次运行刚才的Exe文件,点击测试DLL 查看效果:
这说明一点,通过DLL我们不需要重新编写编译Exe文件,只要重新编译DLL文件即可在实际编程中,各个DLL各司其职,组成功能强大,分工明确的软件
比如QQ旋风
DLL公开函数、方法(直接调用,就像调用公共模块中的公共函数一样)
新建一个DLL,命名为test2,并设置自动生成的Class1 的Instancing 属性为
6- GlobalMultiUse(这个类的各种属性和方法可以象简单的全局函数那样被调用。
该类的实例不需要显式创建,因为它会自动创建。
)
我们在这个Class1 中写入一个函数
生成DLL文件
再新建一个Exe工程,并引用这个DLL,然后调用这个DLL的函数进行测试
运行效果:。
真正的VB编译标准DLL教程
![真正的VB编译标准DLL教程](https://img.taocdn.com/s3/m/59f07ae8102de2bd960588cc.png)
其实很早就有VB编译标准DLL的插件了,但是不是向网上所谓的替换某文件然后在复制什么文件然后在链接编译(真的有些懊恼,敢问写这文章的作者是怎么做到的,反正我是按照他的思路和方法去做了的,用VB6.0没办法编译出来,压根我可能有被忽悠了。
)标准的DLL插件是由“予心居” (记住这位大哥的名字,嗯,好人啊!)编写成的,标准的DLL也是很方便,而且还有很多你想不到的实用功能哦!好了,说了那么多,还没有进入主题,抱歉大家。
下面我们来做个小实例吧。
1:安装所需要的插件啦,这里提供两个下载方式:下载地址1:/ftn_handler/4f578214bc485 3618a778dbd701be3b85aa183a27e5da32a121fef179671bdaa620 b3053ac6076f96f050795264879c5d0381a33da559cae68941016a f7ba337/DLL%E6%8F%92%E4%BB%B6.exe?k=7537393161139cc705a7ee3547635617570601555802020a18010d07034e500d07521453 595557155702015759565c5c07005d576168647c797b8bd4dd9d4a 5d4d52390c&fr=00&&txf_fid=000000007f2437f4c00541329f3f cccfb0bb7256右键复制迅雷下载‘---------------------------------------------QQ群共享下载下载地址2:群号:34928986 (加群请注明VB编程)这个是永久共享的,上面那个是文件中转站的。
大家也别说我这不好那不好的了,其实现在学VB的人是在太少了。
很想结识一些和我一样共同志向的朋友!‘---------------------------------------------2:我们用编译一个标准的动态链接库,其功能实现按钮的特效,如图:我们首先创建一个DLL工程:如图:然后新建一个类模板:如图:(大家也别说我烦,这是对新手考虑,因为我也是新手过来的)在类模板输入代码(也不多说了,这个代码是网上随便找的,觉得好可以,所以就拿来给大家示范了。
VB制作可输出函数DLLrar自解压去右键DLL源代码.doc
![VB制作可输出函数DLLrar自解压去右键DLL源代码.doc](https://img.taocdn.com/s3/m/3c439226a0116c175e0e4841.png)
VB制作可输出函数DLL (标准DLL )无需注册,只要放在程序同目录内就可以调用,非常方便。
其实可用的方法有很多种,下面介绍的这个是我用到现在最可靠的的,里面的C2.EXE和link.exe ,因为时间长了记不得是那个作者的了 ,忘作者见谅。
第一步、准备工作1、编译新的 C2.EXE,和 link.exeo&************新的 C2 EXE**********************************新的C2.exe程序建立新工程,不需要窗体,只要一个模块放上下面的main过程,工程属性里面启动对象Sub mainPublic Sub Main()On Error Resume NextDim strCmd As String, strPath As StringDim oFS As New Scripting. FileSystemObjectDim ts As TextStreamstrCmd = CommandstrPath = App.PathSet ts = oFS. CreateTextFile(strPath & "2/og.F"丿ts. Write Line ''Beginning execution at " & Date & ” " & Time()ts. WriteBlankLines 1ts. WriteLiriw "Command line parameters to c2 call:nts.WriteLine " " & strCmdts. WriteBlankLines 1ts. WriteLine "Calling C2 compiler"Shell n c2comp.exe n & strCmdIf Err.Number <> 0 Thents. Write Line "Error in calling C2 compiler..."End If6************新白勺ts. WriteBlankLines 1ts. Write Line "Returned from c2 compiler call 9' ts.CloseEnd Sub编译成C2.EXE,不要直接覆盖,放在其他地方备用。
DLL文件制作与在VBA调用初级进阶
![DLL文件制作与在VBA调用初级进阶](https://img.taocdn.com/s3/m/9b0dff220722192e4536f625.png)
DLL文件制作与在VBA调用初级进阶■作者:ldhyob 日期:2004.02本文用一简例来演示如何将一正常在VBA中运行的代码移植到VB制作的DLL中去,并介绍如何在VBA 中进行调用。
这仅仅是最初级的介绍,希望能对此内容想了解的版友们一些帮助,而已掌握该技术的FANS 们完全可以跳过本文。
先来了解一下什么是DLL:DLL是Dynamic Link Library的缩写,意为动态链接库。
在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件,放置于系统中。
当我们执行某一个程序时,相应的DLL文件就会被调用。
一个应用程序可有多个DLL文件,一个DLL文件也可能被几个应用程序所共用,这样的DLL文件被称为共享DLL文件。
DLL文件一般被存放在C:\Windows\System目录下。
因此,DLL文件可以看作是一个程序扩展函数库,成为应用软件程序的外挂接口。
就象我们常在程序中用的WINDOWS API,就是如此,它是微软提供给程序员的函数宝库,用户只需了解函数功能与调用规则就可以拿来使用,而不用知道也不需要知道具体源码。
也正因为此,现在许多VBA开发者在保护其代码时也多采用此法来维护其合法权益。
现在开始。
假如我们要编这么一段代码:将工作表Sheet1的A1单元格的数值与B1单元格的数值相加填写到C1单元格去(嘿嘿,这是极简单的了,只是用来说明问题),在VBA模块我们可以编写这样的代码:Sub test()On Error Resume NextDim i, j As IntegerWith Worksheets("Sheet1")i = .Cells(1, 1).Valuej = .Cells(1, 2).Value.Cells(1, 3) = i + jEnd WithEnd Sub执行上面的宏,会发现C1单元格自动会出现A1+B1的结果了。
用VB编写dll入门详解-Foxtable
![用VB编写dll入门详解-Foxtable](https://img.taocdn.com/s3/m/9c5cc5070912a21614792974.png)
一、打开Microsoft Visual Studio 2010二、创建VB类库,并命名为:fox1.0三、修改类名:将Class1.vb 修改成fox.vb四、添加类图。
步骤:项目>添加新项>类图>保存五、用鼠标将fox.vb拉到ClassDiagram1.cd 中,生成一个类,如果所示:六、添加类方法,并将方法名设为:fox七、双击fox方法,进入fox.vb八、添加引用。
右击项目名(fox1.0)选择添加引用在.NET中选择System.windows.forms继续添加引用:在浏览项目中找到foxtable.exe,并添加引用九、回到fox.vb项目中。
在最开始引用文件,输入Imports System.Collections.GenericImports System.TextImports System.Windows.FormsImports Foxtable然后再Public Sub fox() 与End Sub 之间添加foxtable代码,比如:Dim dr As DataRowdr = DataTables("表A").AddNew()dr("第一列") = "来自dll文件" '将新增行的日期设为当天日期。
Forms("窗口1").Open()’以上代码是在表A中新增一行,设置第一列的值和打开窗口1完成后如下图:十、右击项目名称,选择属性十一、生成dll 文件:鼠标单击生成>生成fox1.0(U )生成完成后,右击项目fox1.0,选择[在windows 资源管理器中打开文件夹(X )]在bin\Debug 目录中找到fox1.0.dll ,这个dll文件就是刚刚生成的复制该dll文件至foxtable的项目下十二、foxtable引用打开foxtable项目文件,进入管理项目>外部引用单击打开点击浏览,找到本项目(foxtable)中刚复制过来的fox1.0.dll 文件,点击打开引用成功后,单击确定最后在命令窗口执行以下代码Dim s As new fox1._0.fox()s.fox()(fox1._0是更命名空间,fox是fox.vb的文件名,第二行的fox()是方法)点击执行,即可在foxtable中运行dll中指定的代码。
VB封装DLL实例讲解(三)
![VB封装DLL实例讲解(三)](https://img.taocdn.com/s3/m/6c1df82b2f60ddccda38a050.png)
VB封装DLL实例讲解(三)一、手动注册及引用(一)手动注册及引用方法(参看实例:手动引用.mdb)进入VBA编辑窗口,点菜单【工具】—【引用】,打开【引用】对话框,点【浏览】按钮,打开【添加引用】对话框,点选要引用的DLL(测试实例为:ClsFindString.dll),点【打开】—点【确定】,我们完成动态链接库的手动注册及引用。
4点确定按钮1点浏览按钮2点选DLL3点打开按钮(二)手动注册及引用方法不足及问题手动注册引用优点是不言而喻的,方便简捷,易于操作。
但在实际运用中,当我们在其他电脑上发布应用程序,或运行我们测试好的应用程序时,却会出现错误提示,程序无法正常运行。
错误(一):找不到工程或库(见下图)错误的主要原因:DLL在当前运行的电脑系统中没有注册信息,而且引用不正确。
错误(二):引用的动态链接库(DLL)丢失(见下图)进入到VBA编辑窗口,点菜单【工具】—【引用】,打开【引用】对话框,我们会看到之前引用的DLL动态链接库丢失。
错误的主要原因:系统无法找到原路径引用DLL。
错误(三):自动化错误(见下图)错误的主要原因:我们在发布应用程序的电脑或系统中,虽然重新完成DLL手动注册和引用,但如果DLL路径再次改变,运行程序时就会出现“自动化错误”提示。
错误(四):ActiveX部件不能创建对象(见下图)错误的主要原因:应用程序已正常引用DLL动态链接库,但其册注信息丢失或者没有正常注册,就会出现以下问题。
(三)解决上述错误方法1、解决错误方法,当然是重新进行DLL的手动注册及引用,具体步骤参下图。
但这只是治标不治本的办法,不利于对外发布我们的应用程序,最好的办法还是通过VBA自动完成DLL的注册及引用。
1去除丢失DLL钩选5点确定按钮2点浏览按钮3点选DLL4点打开按钮我们可以将注册语句放在窗体的加载事件,自动完成DLL的注册,具体可以参看实例。
但如果我们有多个DLL需要批量注册时,可以考虑通过软件打包发布工具来完成DLL的注册工作;也可以事先编写BAT文件,让打包发布时将该BAT文件一并打包发布,安装时运行该BAT文件,来完成N个DLL的批量注册,在些就不多着笔墨,大家可以参看实例包中的BAT文件实例。
如何用VB编写自己的DLL文件,并调用其中的函数
![如何用VB编写自己的DLL文件,并调用其中的函数](https://img.taocdn.com/s3/m/7b9ed24dbf23482fb4daa58da0116c175f0e1e0c.png)
如何用VB编写自己的DLL文件,并调用其中的函数一、VB编写自己的DLL文件1.新建一个VB工程,工程类型为ActiveX DLL类型。
2.设定工程的名字和类模块的名字。
这里我使用的工程的名字是DLLTest,类模块的名字是Class1。
3.在类模块中写入要封装的函数这里我写了一个计算长方体的体积的函数,代码如下:1.Function calVolume(ByVal a As Double, ByVal b As Double, ByVal c As Double) As Double2.calVolume = a * b * c3.End Function4.保存工程,并生成Dll文件。
通过选择”文件“->”生成DllT est.dll“,生成Dll文件。
至此,完成Dll文件的制作。
二、如何调用自己制作的Dll文件中的函数1.新建一个VB工程,工程类型为标准EXE类型。
2.注册制作的Dll文件。
注册命令格式为:regsvr32 dll文件的绝对地址名称举例说明:比如我把上面我生成的DllTest.dll放在了E盘的VbTest文件里面了,那么我的注册命令为:regsvr32 E:\VbTest\DllTest.dll。
如果注册成功,系统会有弹窗提示。
(测试发现,注册dll文件时,路径文件夹的名字不能有空格)3.在工程中添加相关引用。
”工程“->”引用“->”DllTest“,在DllTest前面打上对勾,即可。
4.编写调用Dll文件的相关代码。
这里我在主窗体中添加了一个按钮,在按钮里面写入了如下代码:Private Sub Command1_Click()Dim MyObj As DllT est.Class1 Set MyObj = New Class1Dim aa As DoubleDim bb As DoubleDi m cc As DoubleDim tempVolume As Doubleaa = 1.1bb = 2.2cc = 3.3tempVolume = MyObj.calVolume(aa, bb, cc)MsgBox temp VolumeEnd Sub另外,我添加了一个模块,在模块中写入了如下代码:Public Declare Function calVolume Lib 'DllTest.dll' (ByVal a As Double, ByVal b As Double, ByVal c As Double) As Double5.至此结束。
VB 制作 可输出函数DLL rar自解压去右键DLL源代码
![VB 制作 可输出函数DLL rar自解压去右键DLL源代码](https://img.taocdn.com/s3/m/c3ce1e1a964bcf84b9d57b83.png)
VB 制作可输出函数DLL(标准DLL)无需注册,只要放在程序同目录内就可以调用,非常方便。
其实可用的方法有很多种,下面介绍的这个是我用到现在最可靠的的,里面的C2.EXE,和link.exe,因为时间长了记不得是那个作者的了,忘作者见谅。
第一步、准备工作1、编译新的C2.EXE,和link.exe。
‘************新的C2.EXE**********************************新的C2.exe程序建立新工程,不需要窗体,只要一个模块放上下面的main过程,工程属性里面启动对象Sub mainPublic Sub Main()On Error Resume NextDim strCmd As String, strPath As StringDim oFS As New Scripting.FileSystemObjectDim ts As TextStreamstrCmd = CommandstrPath = App.PathSet ts = oFS.CreateTextFile(strPath & "\c2log.txt")ts.WriteLine "Beginning execution at " & Date & " " & Time()ts.WriteBlankLines 1ts.WriteLine "Command line parameters to c2 call:"ts.WriteLine " " & strCmdts.WriteBlankLines 1ts.WriteLine "Calling C2 compiler"Shell "c2comp.exe " & strCmdIf Err.Number <> 0 Thents.WriteLine "Error in calling C2 compiler..."End Ifts.WriteBlankLines 1ts.WriteLine "Returned from c2 compiler call"ts.CloseEnd Sub编译成C2.EXE,不要直接覆盖,放在其他地方备用。
利用VB开发DLL的方法
![利用VB开发DLL的方法](https://img.taocdn.com/s3/m/c5ad582d453610661ed9f496.png)
利用VB开发DLL的方法一、什么是DLL动态链接库英文为DLL,是Dynamic Link Library 的缩写形式,DLL 是一个包含可由多个程序同时使用的代码和数据的库,DLL 不是可执行文件。
动态链接提供了一种方法,使进程可以调用不属于其可执行代码的函数。
函数的可执行代码位于一个DLL 中,该DLL 包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数。
DLL 还有助于共享数据和资源。
多个应用程序可同时访问内存中单个DLL 副本的内容。
DLL 是一个包含可由多个程序同时使用的代码和数据的库。
二、实现方法1.新建一个ActiveX Dll,工程名字为vbmytestdll,类模块名字为mytestdll2.类模块内容只有一个函数,主要返回DLL的HELLO WORLDPublic Function dlltest1() As Stringdlltest1 = "HELLO WORLD"End Function3.保存,生成DLL,名字为vbmytestdll.dll4.新建一个EXE工程,在菜单: 工程---引用---浏览里找到vbmytestdll.dll,把它引用进来5.EXE工程代码如下:Option ExplicitDim testdll As mytestdll'类模块名字Private Sub Form_Load()Set testdll = New mytestdll 'DLL的一个新实例Me.Caption = testdll.dlltest1 '我的标题=返回DLL的HELLO WORLDEnd Sub。
VB封装DLL实例讲解(二)
![VB封装DLL实例讲解(二)](https://img.taocdn.com/s3/m/9b95ddfa770bf78a652954b7.png)
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 Object Library ”完成对当前版本ACCESS 应用程序对象的引用。
(实例演示版本为ACCESS 2003)对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表述(到又改回了Application)。
✍例程:在VB编程中获得VB及ACCESS VBA获取当前路径实例:'在VB中获得当前路径:App.Path'在VB中获得ACCESS的当前路径:Application.CurrentProject.Path在office各应用程序之间调用各组件时,通常在对象前加上库名,如:Access.Application 来表述,但因为VB与ACCESS顶层对象原本表述就存在区别,在VB中可以直接用Application表述ACCESS 应用程序对象,并不会产生冲突的问题。
详解VB.net编写DLL(动态链接库、应用程序扩展)文件
![详解VB.net编写DLL(动态链接库、应用程序扩展)文件](https://img.taocdn.com/s3/m/61a40579001ca300a6c30c22590102020740f2f6.png)
详解编写DLL(动态链接库、应⽤程序扩展)⽂件⾸先,我们启动VS(Visual-Studio简称),我使⽤的是VS2008版本。
新建⼀个项⽬-选择内裤(额...不好意思)→类库,名称就默认吧.编写类库没有窗体设计,因此我们不能使⽤⼯具箱中的控件..类库⽀持Function函数,Sub过程等等....完整代码如下:Imports System.IOImports System.Security.CryptographyPublic Class Class1Public Function MD5(ByVal Path As String) As StringDim fstream As New FileStream(Path, _FileMode.Open, _FileAccess.Read)Dim dataToHash(fstream.Length - 1) As Bytefstream.Read(dataToHash, 0, fstream.Length)fstream.Close()Dim hashvalue As Byte() = CType(CryptoConfig.CreateFromName("MD5"), HashAlgorithm).ComputeHash(dataToHash)Dim i As IntegerDim result As String = ""For i = 0 To hashvalue.Length - 1result += Hex(hashvalue(i)).ToLowerNextReturn resultEnd Function '返回MD5值End ClassPS:如果复制的格式不正确请⾃⾏修改。
我们保存之后,选择 “⽣成-⽣成ClassLibrary1"在对应的保存⽬录下找到"ClassLibrary1.dll",这就是你已经写好的DLL了.将其复制到Windows⽬录下,为了避免找不到⽂件。
VB创建能作为输出函数的DLL
![VB创建能作为输出函数的DLL](https://img.taocdn.com/s3/m/08623a99240c844769eaee57.png)
转帖] VB创建能作为输出函数的DLLDLL,函数,输出QQ:8DLL文件(即Dynamic Link Library,动态链接库)作为系统的一个重要的组成部分,除了一些小程序外,我们几乎能在所有软件中看到DLL文件,而且如果使用VB写的一些收费软件有一个DLL代替关键函数,想破解都难了。
因此,我们就有必要来学习如何编写DLL。
对于很多初学VB的网友来说,VB是一门比较简单的语言,而MicroSoft公司在开发VB时,也增添了很多功能。
所以,我个人觉得VB除了部分不足之外还是挺不错的,当然我指的不足是主要是VB运行库方面的问题。
对于很多VB初学者来说,都会有这么一个错误的认识——VB中创建的DLL 只是COM组件,无法作为输出函数的DLL(即VB写的DLL是不完整的DLL)。
然而,对于一些VB的高手来说,他们就知道应该如何写具有返回值的DLL。
其实,国外早已经有人做出了在VB中制作标准DLL的Add-Ins了,而且在网上也有对于写VB创建能作为输出函数的DLL的相关文章。
今天,我再来讲讲这个话题——VB创建能作为输出函数的DLL对于VB编写DLL,按照我的经验,主要分为两步:一、“安内”,二、“攘外”首先,“攘外必先安内”我们要知道如何使DLL拥有一个能被调用的API函数。
很简单,我不想多说,就是在Module里面写一个Public的Function接下来,我们就可以“攘外”了那么,先来介绍一下编译技术编译器的编译技术可以分为Native Compile(自然编译)与P-Code Compile (伪编译)两种。
自然编译是编译器将高级语言转换为汇编代码,并经链接生成EXE程序的过程。
伪编译是编译器将高级语言转换为某种编码后,将能解释、执行此编码的一段程序一同链接,生成EXE程序。
伪代码P-Code,最早应该叫做Pascal-Code,其名称起源于一个Pascal编译器使用的“中间代码”编译技术。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
怎样用VB编写DLL文件???你先打开VB,然后先中“ActiveX Dll”工程,然后开始编辑。
编完后,保存一般是以“.cls”和“.vbw”保存。
这时你选择“文件”菜单,弹出下拉框,选中“生成.dll”选项,它就会在上面弹出一个进度条“正在生成.dll文件”。
生成以后是一个有好象齿轮状的图标。
如果你要引用,就开一个“标准EXE”工程,然后在“工程”选项中,单击“引用”,找到你刚才的“.dll”的文件名,在前面的复选框中打勾,就可以引用你刚才在那里面写的方法等。
在vb6里建新工程时选用建立dll 做好后用vb的引用就可以了VB中创建的DLL只是COM组件,无法作为输出函数的DLL,其实这只是个错误的说法。
其实MS 非常狡猾,如果你是个VB疯狂发烧友的话,应该早就狂试出这种可以创建输出函数的DLL的方法。
VB编译文件实际上采取了两次编译的方法,首先是调用C2.exe产生*.OBJ文件,然后调用Link.EXE连接。
如果在LINK的时候添加EXPORT选项,实际上是可以输出函数的。
但是,在VB的工程选项中将这些屏蔽了。
而且过分的是:VB在Build完成后会将OBJ文件删除,这样就无法手动通过Link来创建我们需要的DLL了。
不过我找到一个比较龌鹾的变通的方法,就是先创建一个Exe工程,在Form_Load事件里面写下面的语句:Sub MainIf MsgBox("哈哈", vbOKCancel) = vbOK ThenShell "link2.exe " & Command$End IfEnd Sub然后编译为LinkTemp.EXE,接下来将LINK.EXE改名为Link2.exe,将LinkTemp.EXE改名为Link.EXE。
这样在VB调用Link.EXE时会弹出对话框,处理就会中断。
这时就可以有机会将OBJ文件拷贝出来了。
然后我创建了一个ActiveX DLL工程,在这个工程里面添加一个Module并创建一个Public函数mathadd:Public Function mathadd(ByVal a As Long, ByVal b As Long) As Longmathadd = a + bEnd Function编译这个工程,在Link的时候就会中断。
然后把创建的Class1.obj、Module1.obj、Project1.obj备份出来。
然后就可以调用Link2.exe连接OBJ到DLL了,我的连接代码是:Link2.exe "e:\vbdll\Class1.obj" "e:\vbdll\Module1.obj" "e:\vbdll\Project1.obj" "E:\Program Files\Microsoft Visual Studio\VB98\VBAEXE6.LIB" /ENTRY:__vbaS /EXPORT:mathadd /OUT:"e:\vbdll\ProjectOK.dll"/BASE:0x11000000 /SUBSYSTEM:WINDOWS,4.0 /VERS注意里面的/ENTRY和/EXPORT开关,/EXPORT开关声明了输出函数mathadd。
这样就大功告成了,可以被其他语言引入,例如在VB中,只需要:Private Declare Function mathadd Lib "e:\vbdll\ProjectOK.dll" (ByVal a As Long, ByVal b As Long) As Long我现在已经有了一个DLL文件,然后已经编了一个上位机程序,我想将那个DLL动态连接文件直接调用到我的程序里,因为初学VB所以不知道怎么调用已有的DLL文件,请帮忙~~~ 问题补充:我刚才已经把DLL文件有复制到你说的那几个文件夹里了,可是运行.EXE时还是提示找不到DLL文件啊~~~~1. 我给做了个示例工程:/kkk.rar你下载来看看, 里面就两句:模块中定义:Public Declare Function fnMyFunc Lib "MYDLL.DLL" () As Long按钮中放入:Dim str1 As Stringstr1 = "函数调用成功"If (fnMyFunc() = 42) Then MsgBox str1 '注:我那个DLL函数就返回42,其它没有了.2. 下面重新给个微软的示例代码:下列示例示范如何使用Call 语句来将控制转移到子过程、内在函数、和动态链接库(DLL)过程,' 调用一个子过程。
Call PrintToDebugWindow("Hello World")' 上面的语句将控制转移到下面的子过程。
Sub PrintToDebugWindow(AnyString)Debug.Print AnyString ' 在“立即”窗口中显示。
End Sub' 调用一个内在函数,函数的返回值被忽略不处理。
Call Shell(AppName, 1) ' AppName 包含可执行文件的路径。
' 调用Microsoft Windows DLL 过程。
该声明语句必需是类模块中的私有的,而不是标准模块中的。
Private Declare Sub MessageBeep Lib "User" (ByVal N As Integer)Sub CallMyDll()Call MessageBeep(0) ' 调用Windows DLL 过程。
MessageBeep 0 ' 再次调用,但不用“调用”这个关键字。
End SubLoadLibrary你试一试,不过这个需要自己做初始化工作。
(对应于FreeLibrary)回答者:feenn - 秀才二级3-9 09:34 这个问题好解决!你先在运行中输入:regsvr32 dll文件的绝对地址这样就注册了!然后你在VB中点工程-》引用,选中刚才注册的文件,就可以在工程中用了!如果有问题,你可以问我。
(qq;63495849)请问那里有介绍用vb编写动态连接库的!我的源程序是用VB写的,现在要改成DLL,我的C语言不行,所以想用VB改写!程序中用到数据库和串口,如何处理?用VB只能创建ActiveX DLL,不是真正的DLL!部件提供了对象形式的可复用代码。
要使用部件的代码,应用程序可以创建对象并调用对象的属性及方法,这种应用程序被称作一个客户应用程序。
对于使用部件对象的客户应用程序,部件可分为进程内运行的和进程外运行的。
进程内部件,或者说ActiveX DLL,运行在另一个应用程序的进程之中。
客户可以是应用程序本身,也可以是该应用程序正在使用的其它进程内的部件。
ActiveX DLL类似于COM组件一般用CreateObject 函数来创建对象的实例!在VB中引用ActiveX DLL就可以利用ActiveX DLL提供的属性、方法和事件了!在VB 中调用动态连接库作为一种简单易用的Windows开发环境,Visual Basic从一推出就受到了广大编程人员的欢迎。
它使程序员不必再直接面对纷繁复杂的Windows消息,而可以将精力主要集中在程序功能的实现上,大大提高了编程效率。
但凡事有利必有弊。
VB中高度的封装和模块化减轻了编程者的负担,同时也使开发人员失去了许多访问低层API函数和直接与Windows交互的机会。
因此,相比而言,VB应用程序的执行效率和功能比C/C++或Delphi生成的程序要差。
为了解决这个问题,在一个大型的VB开发应用中,直接调用Windows API函数几乎是不可避免的;同时,还有可能需要程序员自己用C/C++等开发一些动态连接库,用于在VB中调用。
本文主要讨论在32位开发环境Visual Basic 5.0中直接调用Windows 95 API 函数或用户生成的32位动态连接库的方法与规则。
Windows动态连接库是包含数据和函数的模块,可以被其它可执行文件(EXE、DLL、OCX 等)调用。
动态连接库包含两种函数:输出(exported)函数和内部(internal)函数。
输出函数可以被其它模块调用,而内部函数则只能在动态连接库内部使用。
尽管动态连接库也能输出数据,但实际上它的数据通常是只在内部使用的。
使用动态连接库的优点是显而易见的。
将应用程序的一部分功能提取出来做成动态连接库,不但减小了主应用程序的大小,提高了程序运行效率,还使它更加易于升级。
多个应用程序共享一个动态连接库还能有效地节省系统资源。
正因为如此,在Windows系统中,动态连接库得到了大量的使用。
一般来说,动态连接库都是以DLL为扩展名的文件,如Kernel32.dll、commdlg.dll等。
但也有例外,如16位Windows的核心部件之一GDI.exe其实也是一个动态库。
编写动态连接库的工具很多,如VisualC++、BorlandC++、Delphi等,具体方法可以参见相关文档。
下面只以Visual C++5.0为例,介绍一下开发应用于VisualBasic5.0的动态连接库时应注意的问题(本文中所有涉及C/C++语言或编译环境的地方,都以VC5为例;所有涉及VisualBasic的地方都以VB5 为例)。
作为一种32位Windows应用程序的开发工具,VB5生成的exe文件自然也都是32位的,通常情况下也只能调用32位的动态连接库。
但是,并不是所有的32位动态库都能被VB生成的exe 文件正确地识别。
一般来说,自己编写用于VB应用程序调用的动态连接库时,应注意以下几个方面的问题:1、生成动态库时要使用__stdcall调用约定,而不能使用缺省的__cdecl调用约定;__stdcall 约定通常用于32位API函数的调用。
2、在VC5中的定义文件(.def)中,必须列出输出函数的函数名,以强制VC5系统将输出函数的装饰名(decoratedname)改成普通函数名;所谓装饰名是VC的编译器在编译过程中生成的输出函数名,它包含了用户定义的函数名、函数参数及函数所在的类等多方面的信息。
由于在VC5中定义文件不是必需的,因此工程不包含定义文件时VC5就按自己的约定将用户定义的输出函数名修改成装饰名后放到输出函数列表中,这样的输出函数在VB生成的应用程序中是不能正确调用的(除非声明时使用Alias子句)。
因此需要增加一个.def文件,其中列出用户需要的函数名,以强制VC5不按装饰名进行输出。