VB开发DLL
(原创)VS2019VB如何生成DLL文件,调用DLL

(原创)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基础

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文件并且调用的方法.一、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

在动态链接技术中,模块和程序是分离的,模块独立于程序而存在于另一个分离的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基础

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调用VC编写的DLL

这些函数名要用做 VB 中声明时的别名。
如果声明时不带别名会出现“Dll 调用约定错误”。
VB 中编写如下代码运行即可:
Option Explicit
Private
Declare
Function
FuncInDll
Lib
"E:\Computer
Science\dll\liudll\dll_withLibAndH.dll" Alias "_FuncInDll@12" (ByVal a As Long,
如何用 VB 调用 VC 编写的 DLL
——DLL 内函数调用采用别名 首先用 C++编写: dll_withlibAndH.h 如下: extern "C" __declspec(dllexport) int __stdcall FuncInDll (int a);
dll_withlibAndH.cpp 如下: #include <objbase.h> #include <iostream.h> #include "dll_withLibAndH.h"//看到没有,这就是我们增加的头文件
创建一个.bat 文件并输入:
Cl/c dll_withLibAndH.cpp
Link/dll dll_withLibAndH.obj 之后运行此批处理文件即生成 dll_withLibAndபைடு நூலகம்.dll 文件。用 Dll 函数查看器(Viewdll
程序)查看此 dll 文件内的函数,此处为_FuncInDll@12(12 为此函数的参数字节数),
ByVal b As Long, ByVal c As Long) As Long
真正的VB编译标准DLL教程

其实很早就有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工程:如图:然后新建一个类模板:如图:(大家也别说我烦,这是对新手考虑,因为我也是新手过来的)在类模板输入代码(也不多说了,这个代码是网上随便找的,觉得好可以,所以就拿来给大家示范了。
dll文件生成方法

dll文件生成方法
DLL(动态链接库)文件的生成可以通过多种方式,其中一种简单的方法是通过 Microsoft Visual Studio 这样的集成开发环境(IDE)进行。
下面是详细的步骤:
1. 创建环境:首先,确保你已经安装了 Microsoft Visual Studio。
其他版本的 Visual Studio(如 Visual Studio 2022)也可以,但步骤大致相同。
2. 创建 DLL 项目:
打开 Visual Studio。
选择“新建项目”。
在项目模板中选择“DLL”。
输入 DLL 的名称,然后点击“确定”。
3. 编写 DLL 代码:在创建的项目中,你可以开始编写 DLL 的代码。
一个简单的 DLL 可能包含一个导出函数。
4. 编译 DLL:
在 Visual Studio 中,点击“生成”菜单,然后选择“生成解决方案”或直接按 F7 键。
5. 检查生成的 DLL:编译成功后,可以在项目文件夹的“Debug”或“Release”子文件夹下找到生成的 DLL 文件。
6. 测试 DLL:为了测试 DLL 是否正常工作,你可以创建一个新的Windows 应用程序项目,并在其中调用你的 DLL。
7. 分发 DLL:如果你想将 DLL 分发给其他人,只需将 DLL 文件和任何依赖项一起打包即可。
请注意,这只是生成 DLL 的其中一种方法。
还有其他工具和平台(如 Linux)可以使用,具体取决于你的需求和环境。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在动态链接技术中,模块和程序是分离的,模块独立于程序而存在于另一个分离的dll 文件中,这个dll文件是动态链接到程序中的。
那如何在vb中编写一个DLL程序呢?首先,新建一个工程,然后先中“ActiveX Dll”工程。
然后开始编辑,往程序中添加你需要的部件和控件。
编辑完成后,保存工程,工程一般是以“.vbp”文件保存,定义的类以“.cls”和“.vbw”文件保存,窗体以“.frm”文件保存,添加的模块一“.bas”文件保存……。
接着选择“文件”菜单,弹出下拉框,选中“生成.dll”选项,它就会在上面弹出一个进度条“正在生成.dll文件”。
生成以后是一个有好象齿轮状的图标。
当你需要在其他的程序中调用这个dll的时候,需要在系统中注册一下,具体的过程是开始->运行->打开”C:\WINDOWS\system32\regsvr32.exe”,然后找到你要注册的控件的路径,添加在regsvr32.exe的后面。
如果你要引用,就开一个“标准EXE”工程,然后在“工程”选项中,单击“引用”,找到你刚才的“.dll”的文件名,在前面的复选框中打勾,就可以引用你刚才在那里面写的方法等。
Public Function 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,每进程初始化要执行。
A process is loading the DLL. Any per-process initialization should be performed.DLL_THREAD_ATTACH (2)进程交换(注入)一个新的线程,每线程初始化要执行。
The process is spawning a new thread. Any per-thread initialization should be performed.DLL_THREAD_DETACH (3)一个线程结束。
每线程清除要执行。
A thread is exiting. Any per-thread cleanup should be performed.DLL_PROCESS_DETACH (0)一个进程断开dll链接,或者进程结束,每进程清除要执行。
A process is detaching the DLL, or the process is exiting. Any per-process cleanup should be performed.lpvReserved一个long类型提供更多关于DLL_PROCESS_ATTACH 和DLL_PROCESS_DETACH的信息. (如果fdwReason是DLL_THREAD_ATTACH or DLL_THREAD_DETACH,则该参数无用) 如果fdwReason 是DLL_PROCESS_ATTACH, lpvReserved值无意义对于用函数LoadLibrary and GetProcAddress装载dll, 如果fdwReason 是DLL_PROCESS_DETACH, lpvReserved值无意义,如果返回值是从Win32 FreeLibrary function, lpvReserved值也无意义,如果进程结束调用入口点.函数的返回值只有在fdwReason 是DLL_PROCESS_ATTACH才有意义,如果初始化成功,函数返回true,否则返回false.因为这个函数是window调用的入口点.传入这个函数的参数值是由windows决定.当一个线程被用win32 TerminateThread 函数和Win32 TerminateProcess 函数结束,没有调用入口点.要开发一个windows dll,我们创建一个简单的数学函数库,下面代码存在一个.bas模块中名字:MathLib.basOption ExplicitPublic Const DLL_PROCESS_DETACH = 0Public Const DLL_PROCESS_ATTACH = 1Public Const DLL_THREAD_ATTACH = 2Public Const DLL_THREAD_DETACH = 3Public Function DllMain(hInst As Long, fdwReason As Long,lpvReserved As Long) As BooleanSelect Case fdwReasonCase DLL_PROCESS_DETACH' No per-process cleanup neededCase DLL_PROCESS_ATTACHDllMain = TrueCase DLL_THREAD_ATTACH' No per-thread initialization neededCase DLL_THREAD_DETACH' No per-thread cleanup neededEnd SelectEnd Function开头包含一个DllMain过程,没有每进程或者每线程初始化需要执行。
如果fdwReason 参数是DLL_PROCESS_ATTACH被调用,DllMain简单的返回True。
另外,注意dll的函数中的输入参数和返回值用win32 api类型,不要用variant。
我们同样需要一个测试程序(test)验证我们的windows dll是否运行正常,所以创建个标准exe工程,由一个窗口和一个模块组成,模块代码就是declare声明。
Public Declare Function Incement Lib "MathLib.dll" (var As Integer) As IntegerPublic Declare Function Square Lib "MathLib.dll" (var As Long) As Long如果不在系统路径,最好加上dll全路径。
那么dll文件时怎么生成的呢?当我们选择文件->编译XXX.dll菜单选项来编译ActiveX dll,vb把我们的代码无缝结合成ActiveX dll,但是当我们检查vb的安装目录,其实这个过程并不是无缝的。
在vb安装目录除vb6.exe,还有C2.exe和link.exe,一个是编译器,一个是链接器,这里就说明vb6.exe本身不能生成dll文件,而dll是由这2个程序一起运行生成的。
VB编译文件实际上采取了两次编译的方法,首先是调用C2.exe产生*.OBJ文件,然后调用Link.EXE连接。
如果在LINK的时候添加EXPORT选项,实际上是可以输出函数的。
但是,在VB的工程选项中将这些屏蔽了。
我们可以通过改名C2.exe和link.exe来中断编译器和链接器的执行过程来发现vb是如何编译的。
下面的代码是个新版本的C2.exe调用真正的C2.exe编译器,其代码如下:Public 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从命令行中我们可以看出生成给链接器执行的object文件,就是说怎么创建windows dll,我们必须中断调用链接器,这样我们可以看到vb传递了什么参数。
看下面代码:Public 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 & "\lnklog.txt")ts.WriteLine "Beginning execution at " & Date & " " & Time()ts.WriteBlankLines 1ts.WriteLine "Command line parameters to LINK call:"ts.WriteLine " " & strCmdts.WriteBlankLines 1ts.WriteLine "Calling LINK linker"Shell "linklnk.exe " & strCmdIf Err.Number <> 0 Thents.WriteLine "Error in calling linker..."Err.ClearEnd Ifts.WriteBlankLines 1ts.WriteLine "Returned from linker call"ts.CloseEnd Sub执行前,把原始link.exe改成linklnk.exe,上面代码编译为link.exe如果我们同c或者c++链接器比较命令行参数,不同之处一目了然。