用VB编写.DLL动态链接库文件

合集下载

(原创)VS2019VB如何生成DLL文件,调用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.NET.DLL动态链接库文件_开发平台子站_技巧_IT专家网

轻松编写VB.NET.DLL动态链接库文件_开发平台子站_技巧_IT专家网

轻松编写.DLL动态链接库文件_开发平台子站_技巧_IT专家网大家知道吗?VB一般可以生成两种特殊的DLL,一个是ActiveX DLL和ActiveX Control(*.ocx)。

这两种DLL都是VB支持的标准类型。

这里主要就怎样编写 .DLL动态链接库文件分析讲解。

NewViewStudio的意见:创建 .DLL只是COM组件,无法作为输出函数的DLL,其实这只是个错误的说法。

其实MS非常狡猾,如果你是个VB疯狂发烧友的话,应该早就狂试出这种可以创建输出函数的DLL的方法。

VB 编译文件实际上采取了两次编译的方法,首先是调用C2.exe产生*.OBJ文件,然后调用Link.EXE连接。

如果在LINK的时候添加EXPORT 选项,实际上是可以输出函数的。

但是,在VB的工程选项中将这些屏蔽了。

而且过分的是:VB在Build完成后会将OBJ文件删除,这样就无法手动通过 Link来创建我们需要的DLL了。

不过我找到一个比较龌鹾的变通的方法,就是先创建一个Exe工程,在Form_Load事件里面写下面的语句:复制内容到剪贴板 .DLL程序代码Sub Main If MsgBox("哈哈", vbOKCancel) = vbOK Then Shell "link2.exe " & Command$ End IfEnd Sub然后编译为LinkTemp.EXE,接下来将LINK.EXE改名为Link2.exe,将LinkT emp.EXE改名为Link.EXE。

这样在VB调用Link.EXE时会弹出对话框,处理就会中断。

这时就可以有机会将OBJ文件拷贝出来了。

然后我创建了一个ActiveX DLL工程,在这个工程里面添加一个Module并创建一个Public函数mathadd:复制内容到剪贴板程序代码Public Function mathadd(ByVal a As Long, ByVal b As Long) As Long mathadd = a + bEnd Function编译这个工程,在Link的时候就会中断。

在vb中生成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

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 ,每进程初始化要执行。

将VBA代码编译封装成为DLL动态链接库方法

将VBA代码编译封装成为DLL动态链接库方法

将VBA代码编译封装成为DLL动态链接库方法在OFFICE中使用VBA虽然方便,并且功能强大,但是VBA在代码的保护上却存在着缺陷。

如果不对VBA工程设置密码保护,代码很容易被人浏览乃至窃取。

而且即使设置了密码保护,也很容易被人破解。

因此,要想真正保护VBA代码,要想让别人无法或难于破解您的VBA代码,那么,我们可以将VBA代码编译成为DLL动态链接库,也就是封装成为DLL的意思,下面是与此相关的方法,希望对您有所帮助。

一、为什么要编译成为DLL我们知道,Visual C++、Visual Basic和C++ Builder以及Delphi等编译器所编译出来的程序不容易被人破解(相对来说),这是因为代码被编译成了可执行文件或者动态链接库文件。

那么,我们是否可以将VBA代码封装到动态链接库文件中,然后用Word调用呢?回答是肯定的。

而且这样做还有一个好处,即可以加快代码的运行速度。

二、将VBA代码封装成动态链接库假如我们已经写好了一个VBA工程,而且运行无误。

①建立VB工程及一般性操作首先,我们需要两种工具,其中当然包括Microsoft Word,另外一种是Microsoft Basic 6.0。

打开Microsoft Basic 6.0,在“新建工程”中选取“ActiveX DLL”,新建一个工程。

在属性窗口中将工程名改为VBAPrj,类模块名改为VBACls。

然后在“工程”菜单下打开“引用”,选取“Microsoft Office 11.0 Object Library”——这一步很是关键,切不可遗漏,然后保存工程。

下面我们所做的是向工程内添加代码。

将VBA工程中的一个名为Test过程的代码选定后复制,然后切换到VB编辑器,选中VB的工程管理器中的类模块VBACls,将代码粘贴至代码编辑窗口中,于是这段代码便成了类模块VBACls一个方法,然后将工程编译生成dll文件(如果编译成功的话)。

在Word中,我们就可以通过类模块VBACls建立的对象来调用此方法(具体怎么调用,我们将后面介绍)。

真正的VB编译标准DLL教程

真正的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文件制作与在VBA调用初级进阶

DLL文件制作与在VBA调用初级进阶

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的结果了。

VBA调用外部动态链接库的方法与示例

VBA调用外部动态链接库的方法与示例

VBA调用外部动态链接库的方法与示例VBA(Visual Basic for Applications)是微软的一种编程语言,广泛应用于Office套件中的各种应用程序,如Excel、Word和Access。

VBA允许用户通过编写宏来自动化任务、增强功能和定制用户界面。

有时候,我们可能需要调用外部的动态链接库(DLL)中的函数来扩展VBA 的功能。

本文将介绍VBA调用外部动态链接库的方法,并提供一些示例帮助读者更好地理解。

一、什么是动态链接库(DLL)?动态链接库(Dynamic Link Library,DLL)是一种微软Windows操作系统中的可执行文件。

DLL中包含可供其他程序调用的函数、数据和资源。

通过使用DLL,我们可以实现代码的共享和重复使用,提高程序的模块化程度和执行效率。

二、VBA中调用DLL的方法VBA提供了一组用于调用DLL函数的关键字和函数。

具体步骤如下:1. 声明DLL函数在VBA代码中,首先需要声明将要调用的DLL函数。

声明的语法如下:```Declare Function 函数名 Lib "动态链接库文件名" (参数列表) As 返回值类型```其中,函数名是DLL中的函数名,动态链接库文件名是DLL所在的路径和文件名,参数列表是函数的输入参数,返回值类型是函数的返回值类型。

2. 在VBA中调用DLL函数声明完DLL函数后,我们就可以在VBA代码中调用这些函数了。

调用的语法如下:```变量名 = 函数名(参数列表)```其中,变量名是接收函数返回值的变量,函数名是所声明的DLL函数的函数名,参数列表是函数的输入参数。

3. 注册和取消注册DLL在调用DLL函数之前,我们需要先将DLL注册到Windows系统中。

注册DLL可以使用Windows系统提供的regsvr32工具。

具体操作步骤如下:a. 打开命令提示符窗口。

b. 输入regsvr32命令,后面是DLL的完整路径和文件名。

VBA调用DLL动态链接库

VBA调用DLL动态链接库

VBA调用DLL动态链接库1.打开VBA编辑器,点'工具'菜单下的'引用'命令,在引用对话框中引用该动态链接库。

调用代码如下:Dim VBACls As New VBAPrj.VBAClsVBACls.Test(ThisDocument)2.如果知道该动态链接库文件的位置,可以在ThisDocument代码窗口以代码形式引用, 代码如下:Private Sub Document_Open()On Error Resume NextMe.VBProject.References.AddFromFile 'D:\VBAPrj.dll'End Sub3.将动态链接库文件拷贝到文档同一目录下,可在ThisDocument代码窗口中建立如下引用函数:Private Function GetProjectDoc() As ObjectOn Error Resume NextDim VBACls As ObjectSet VBACls = CreateObject('VBAPrj.VBACls')If VBACls Is Nothing ThenMsgBox 'VBAPrj.dll必须和文档在同一目录下!'Exit FunctionEnd IfSet GetProjectDoc = VBAClsEnd Function然后以以下代码形式调用Test:Dim objPrjDoc As ObjectSet objPrjDoc = GetProjectDocCall objPrjDoc.T est(ThisDocument)Set objPrjDoc = Nothing使用第一种方法调试提示找不到类库,第二种方法我没试过,用了第三种方法调试成功。

我也觉得第三种还是蛮好的,除了多几行代码。

成功调用DLL后原来很多在VB下写的东东简单改一下就可以在VBA下用了,效率又高,保密性又好。

VB创建能作为输出函数的DLL

VB创建能作为输出函数的DLL

转帖] 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编译器使用的“中间代码”编译技术。

VB封装DLL实例讲解(一)

VB封装DLL实例讲解(一)

e an dAl l t h 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]" Then strOut = strOut & Mid(strM, I, 1) End If Next I'用MsgBox 函数进行输出测试End Sub以上代码还不能直接用于封装,须将其修改成为公用函数(过程)(二)VB 封装实例中VBA 代码步骤一:在VB 编辑窗中,点菜单【文件】-【新建工程】,打开新建工程窗口步骤二:修改工程名,这即生成的DLL 库名步骤三:修改类名步骤四:在代码窗口输入如下代码。

VB调用动态链接库(DLL)

VB调用动态链接库(DLL)

VB调用动态链接库(DLL)作为一种简单易用的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等,具体方法可以参见相关文档。

VBA调用外部DLL文件的高级技巧与应用

VBA调用外部DLL文件的高级技巧与应用

VBA调用外部DLL文件的高级技巧与应用VBA(Visual Basic for Applications)是一种流行的编程语言,广泛用于Microsoft Office套件中的应用程序如Excel、Word和Access。

VBA内置了许多功能,但有时候我们可能需要更高级的功能来实现我们的需求,这时候就可以借助外部DLL文件来扩展VBA的功能。

DLL(动态链接库)文件是包含可供多个程序共享和使用的代码和数据的文件。

VBA可以通过使用Declare语句来引用DLL文件中的函数和过程,从而实现对其功能的调用。

在本文中,我们将探讨一些VBA调用外部DLL文件的高级技巧和应用。

1. 理解DLL文件的结构与导出函数DLL文件包含了一组导出函数,通过这些函数可以实现对DLL提供的功能的调用。

在VBA中,我们需要了解DLL文件的结构以及导出函数的名称、参数和返回值类型。

2. 声明DLL函数在VBA中,通过使用Declare语句可以声明外部DLL函数的名称、参数和返回值类型。

声明外部函数的正确性对于调用DLL文件非常重要。

例如,下面是一个声明ShellExecute函数的示例:Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA"_(ByVal hWnd As Long, ByVal lpOperation As String, ByVal lpFileAs String, ByVal lpParameters As String, _ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long在这个示例中,我们声明了一个名为ShellExecute的函数,它位于shell32.dll文件中。

该函数用于执行操作系统的某些功能,例如打开文件或运行程序。

VB调用C程序的方法—动态链接库法

VB调用C程序的方法—动态链接库法

VB调用C程序的方法—动态链接库法内容预览:文中介绍了一种实现VB调用C语言程序的方法-动态连接库法,给出了动态链接库制作的一般框架,通过实例描述了动态连接库的实现及其制做方法、编程步骤,这种方法具有普遍的意义。

关键词 VB 动态连接库DLL C程序一、引言 Visual Basic( 以下简称VB)是一种可视化的面向对象的编程语言,以其编程简单、快捷等特点,深受广大WINDOWS程序员的青睐。

利用VB开发界面友好、操作方便的软件只需很短的时间。

但是VB运行速度较慢,对于庞大的科学计算问题,VB的这种慢速会使人难以忍受。

C语言是国际上非常流行的一种中级编程语言,以其灵活、高效等优点而获得广泛应用,许多的应用程序都是用C语言在DOS 环境下编写而成。

那么如何发挥VB和C这两种语言的优势,用VB设计一种良好的for windows界面来调用C语言程序,即实现VB调用C语言程序呢?现有的文献只提到动态链接库(以下简称DLL)可以将这两种语言连接起来,但有讲动态链接库DLL的制做及其编程方法……如果你已经成为会员查看文章请点此登录吧!本文为收费公文,以下四种方式可以获得权限:内容预览:文中介绍了一种实现VB调用C语言程序的方法-动态连接库法,给出了动态链接库制作的一般框架,通过实例描述了动态连接库的实现及其制做方法、编程步骤,这种方法具有普遍的意义。

关键词 VB 动态连接库DLL C程序一、引言 Visual Basic( 以下简称VB)是一种可视化的面向对象的编程语言,以其编程简单、快捷等特点,深受广大WINDOWS程序员的青睐。

利用VB开发界面友好、操作方便的软件只需很短的时间。

但是VB运行速度较慢,对于庞大的科学计算问题,VB的这种慢速会使人难以忍受。

C语言是国际上非常流行的一种中级编程语言,以其灵活、高效等优点而获得广泛应用,许多的应用程序都是用C语言在DOS 环境下编写而成。

那么如何发挥VB和C这两种语言的优势,用VB设计一种良好的for windows界面来调用C语言程序,即实现VB调用C语言程序呢?现有的文献只提到动态链接库(以下简称DLL)可以将这两种语言连接起来,但有讲动态链接库DLL的制做及其编程方法……如果你已经成为会员查看文章请点此登录吧!本文为收费公文,以下四种方式可以获得权限:。

如何用VB编写自己的DLL文件,并调用其中的函数

如何用VB编写自己的DLL文件,并调用其中的函数

如何用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的方法

利用VB开发DLL的方法

利用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。

如何用VC编写DLL动态链接库文件

如何用VC编写DLL动态链接库文件

如何用VC编写DLL动态链接库文件作者: falcon 发表日期: 2006-04-24 14:51引言前不久刚学会了如何用VB编写DLL动态链接库,但是用vb编写动态链接库比较麻烦些。

下面我们再学习一下如何用vc编写dll动态链接库,并且通过vc或者vb调用正文这里主要介绍两个东东第一:用vc编写动态链接库,用vc调用第二:用vb编写动态链接库,用vb调用一、用vc编写动态链接库,用vc调用1、创建DLL文件,命名为FIRSTDLL1)打开visual c++ 6.0通过new创建一个win30 Dynamic-link Libary的工程,命名为FIRSTDLL2)接着选择最后一个选项,让系统帮我们创建一些必要的文件3)把FIRSTDLL.cpp用下面的代码覆盖Code:[Ctrl+A Select All]4)接着我们在FIRSTDLL.h头文件里头用下面的代码覆盖Code:[Ctrl+A Select All]5)好拉,我们现在可以编译FIRSTDLL.cpp文件拉,到debug目录下看看,是不是已经生成拉我们需要的FIRSTDLL.dll拉2、通过vb编写一个函数来调用该DLL,该函数为USEFIRSTDLL1)同样通过new创建一个工程,该工程为win30 application,命名USEFIRSTDLL2)在USEFIRSTDLL.cpp文件中用如下代码覆盖Code:[Ctrl+A Select All]好拉,到这里第一部分介绍完拉下面介绍第二部分二、用vc编写动态链接库,用vb调用在介绍这个之前必须声明的是(引用自下面的参考资料)一个DLL中的函数要想被VB调用,必须满足两个条件:一是调用方式为stdcall,另一个是必须是export的。

要做到第一条,只须在函数声明前加上__stdcall关键字。

如:short __stdcall sample(short nLen, short *buffer)要做到第二条,需要在*.def文件中加上如下的几行:EXPORTSsample @1这里的sample是你要在VB中调用的函数名,@1表示该函数在DLL中的编号,每个函数都不一样。

vb动态加载dll的一个类,实现vb动态加载dll并动态调用dll导出的函数的一个方便办法

vb动态加载dll的一个类,实现vb动态加载dll并动态调用dll导出的函数的一个方便办法

vb动态加载dll的一个类,实现vb动态加载dll并动态调用dll导出的函数的一个方便办法自从会vb用调用动态库函数以来,我一直在想:如何动态的调用dll 里的函数?网上有一个用CallWindowProc函数的方法,不过我还是喜欢自己有个办法.今天工夫不负有心人,我终于把我心中一直想的办法给实现了,干脆就往自己的空间上贴吧.错误的地方,希望可以得到有这方面的师傅给以指正,以求进步!对于系统api我没有尝试,如果调用约定相符,应该适用于对系统api的调用.我自己用c写个dll,然后在vb里写了这个类.以下代码只是我简单的实现,主要的是看实现的道理.vc代码:///'我把dll文件名命名为:dll#include <Windows.h>#include <stdlib.h>#include <string.h>#include 'stdafx.h'BOOL APIENTRY DllMain( HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved){return TRUE;}extern 'C' BOOL _declspec(dllexport) add(int a){MessageBoxA(NULL,'运行在dll里!','成功',MB_OK);return 1;}///vb代码:'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''类代码:Private 状态标志 As BooleanPrivate 模块句柄 As LongPrivate 本地函数地址备份(0 To 4) As BytePrivate 被替换函数的地址 As LongPublic Function 替换函数地址(模块名As String, 函数名As String, 本地函数地址 As Long) As BooleanIf 0 = 本地函数地址 Then替换函数地址 = 0Exit FunctionEnd If被替换函数的地址 = 替换函数地址Dim 函数地址 As LongDim a As LongDim 跳转指令(0 To 4) As Byte'加载模块模块句柄 = LoadLibrary(模块名)If 0 <> 模块句柄 Then'状态标志 = 1Else:替换函数地址 = 0Exit Function'检索函数地址函数地址 = GetProcAddress(ByVal 模块句柄, ByVal 函数名)If 0 <> 函数地址 Then'状态标志 = 1Else替换函数地址 = 0Exit FunctionEnd If'计算跳转地址a = 函数地址 - (本地函数地址 + 5)'构造跳转地址跳转指令(0) = 233a = WriteProcessMemory(-1, ByVal VarPtr(跳转指令(1)), ByVal VarPtr(a), 4, 0)If 0 = a Then替换函数地址 = 0Exit FunctionEnd If'先备份本地函数入口指令a = WriteProcessMemory(-1, ByVal VarPtr(本地函数地址备份(0)), ByVal 本地函数地址, 5, 0)If 0 = a Then替换函数地址 = 0Exit FunctionEnd If'写入跳转指令a = WriteProcessMemory(-1, ByVal 本地函数地址, ByVal VarPtr(跳转指令(0)), 5, 0)If 0 = a Then替换函数地址 = 0Exit FunctionElse:状态标志 = 1替换函数地址 = 1End IfEnd FunctionPublic Function 还原函数地址() As BooleanIf 0 = 状态标志 Then还原函数地址 = 0Exit FunctionEnd IfDim a As Longa = WriteProcessMemory(-1, ByVal 被替换函数的地址, ByVal VarPtr(本地函数地址备份(0)), 5, 0)If 0 = a Then还原函数地址 = 0Exit FunctionElse:状态标志 = 0还原函数地址 = 1End IfFreeLibrary 模块句柄End FunctionPublic Function 当前状态() As Boolean当前状态 = 状态标志End Function''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''vb普通模块代码:'读写内存的api函数Public Declare Function WriteProcessMemory Lib 'kernel32' (ByVal hProcess As Long, ByVal _lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long'加载模块的api函数Public Declare Function LoadLibrary Lib 'kernel32' Alias 'LoadLibraryA' (ByVal lpLibFileName As String) As Long '检索模块里函数地址的api函数Public Declare Function GetProcAddress Lib 'kernel32' (ByVal hModule As Long, ByVal lpProcName As String) As Long 'Public Declare Function FreeLibrary Lib 'kernel32' (ByVal hLibModule As Long) As Long'模拟一个函数与dll里,我们想调用函数类型和参数一致, 用类将函数的地址替换Public Function 测试函数(参数 As Long) As Boolean'我们随便给返回0,因为这个指令将不会被程序执行到测试函数 = 0End Function''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''vb窗口模块代码:Private Sub Form_Load()Dim 模块名 As String, 函数名 As String模块名 = App.Path + '/dll.dll''模块名现在可以自己定了,自由了!函数名 = 'add'Dim p As BooleanDim aa As New Class1p = aa.替换函数地址(模块名, 函数名, AddressOf 测试函数) If p Then测试函数 0'将会弹出对话筐:运行在dll里!aa.还原函数地址End IfEnd Sub'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''。

VB调用C程序的方法―动态链接库法

VB调用C程序的方法―动态链接库法

VB调用C程序的方法―动态链接库法【摘要】本文将介绍VB调用C程序的方法―动态链接库法。

我们将解释动态链接库的概念以及如何在VB中使用动态链接库调用C程序。

接着我们会详细讲解如何创建动态链接库和在VB中调用动态链接库的步骤。

在最后的注意事项中,我们将强调一些需要注意的细节和技巧。

结论部分将强调VB调用C程序的方法的重要性,并讨论未来的发展方向。

通过本文,读者将了解如何利用动态链接库实现VB和C程序之间的无缝衔接,为软件开发提供更多可能性。

VB调用C程序的方法―动态链接库法在软件开发中扮演着重要的角色,其未来发展方向也值得我们深入探讨。

【关键词】VB调用C程序、动态链接库、概念、使用、创建、调用、注意事项、重要性、未来发展方向1. 引言1.1 VB调用C程序的方法―动态链接库法VB调用C程序的方法―动态链接库法是一种常见且高效的方法,用于实现不同编程语言之间的互操作性。

动态链接库(Dynamic Link Library,简称DLL)是一种共享库,其中包含了可被程序动态调用的函数和资源。

在VB中调用C程序,可以通过创建动态链接库来实现。

首先需要编写一个C程序,并将其编译为动态链接库。

然后在VB中通过声明函数的方式引用这个动态链接库,就可以直接调用其中的函数了。

这样可以充分利用C程序的高性能和灵活性,实现与VB的无缝集成。

需要注意的是,在使用动态链接库时要确保函数的参数和返回值的类型与VB中的数据类型兼容。

要避免内存泄漏等问题,需要注意内存的分配和释放。

VB调用C程序的方法―动态链接库法对于提高程序的性能和扩展功能具有重要意义。

未来可以进一步完善这种方法,提供更加方便快捷的方式实现跨语言调用,促进不同语言之间的交流和合作。

VB调用C 程序的方法―动态链接库法将在跨平台开发和系统集成方面发挥越来越重要的作用。

2. 正文2.1 动态链接库的概念动态链接库(Dynamic Link Library,简称DLL)是一种可被多个程序同时使用的程序代码和数据的集合,它可以在运行时被载入内存,并由多个进程共享。

详解VB.net编写DLL(动态链接库、应用程序扩展)文件

详解VB.net编写DLL(动态链接库、应用程序扩展)文件

详解编写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⽬录下,为了避免找不到⽂件。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

用VB编写.DLL动态链接库文件
作者:不详
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 Main
If MsgBox("哈哈", vbOKCancel) = vbOK Then
Shell "link2.exe " & Command$
End If
End 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 Long
mathadd = a + b
End 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" /EN TRY:__vbaS /EXPORT:mathadd /OUT:"e:\vbdll\ProjectOK.dll" /BASE:0x11000000 /SUBSYSTEM:WINDOWS,4.0 /VERSION:1.0 /Dll /INCREMEN TAL:NO /OPT:REF /MERGE:.rdata=.text /IGNORE:4078
注意里面的/ENTRY和/EXPORT开关,/EXPORT开关声明了输出函数mathadd。

这样就大功告成了,可以被其他语言引入,例如在VB中,只需要:
Private Declare Function mathadd Lib "e:\vbdll\ProjectOK.dll" (ByVal a As Long, ByVal b As Long) As Long
经过变通,VB可以做出输出函数的标准动态链接库——其实,国外早已经有人做出了在VB中制作标准DLL的Add-Ins了,使用非常方便,我也做过测试,证明确实可行。

详情请看这里:
/vb/scripts/ShowCode.asp?txtCodeId=54190&lngWId=1。

相关文档
最新文档