❶ VB如何调用动态链接库(DLL)文件
1.对ActiveX
DLL,如果该DLL由本地VB/VC生成就可直接在新的VB工程中引用,拷来的就需要先注册该DLL(记得是regsrv:)。
引用方法:
点击“工程”-〉“引用”找到后打勾就可在程序中直接调用其函数了。
2.其它非ActiveX
DLL,如WINDOWS
API函数,只要用Declare声明一下就可用了。
❷ 怎么才能用VB打开.dll文件,并进行修改
可以用腾讯电脑管家修复下。打开电脑管家——电脑诊所——软件问题——缺少dll文件。
如果不行,那就只有去网上下载了,(注意安全哈,扫描下)
你去下载一个一键获得管理员权限的补丁,然后右击system32文件夹选择“管理员获得所有权”,等全部搞定就可以复制这个dll文件进去了。
直接拷贝该文件到系统目录里:
复制到C:\Windows\System\ 目录下。
❸ VB调用Dll
调用动态库都是这样子的。
你编译exe程序时使用的dll是什么版本,那么你在使用这个exe程序时就要对应的版本.
所以建议你每次编译后把dll跟exe放在一起.这样就不会出现这个问题了。
❹ 如何让VB调用外部的DLL
要声明一个DLL过程,首先需要在代码窗口的"通用(General)"部分增加一个Declare语句。如果该过程返回一个值,应将其声明为
Function:
Declare Function publicname Lib "libname" [Alias "alias"] [([[ByVal] variable [As type] [,[ByVal] variable [As type]]...])] As Type
如果过程没有返回值,可将其声明为Sub:
Declare Sub publicname Lib "libname" [Alias "alias"] [([[ByVal] variable [As type] [,[ByVal] variable [As type]]...])]
缺省情况下,在标准模块中声明的DLL过程,可以在应用程序的任何地方调用它。在其它类型的模块中定义的DLL过程则是模块私有的,必须在它们前面声明Private关键字,以示区分。下面分别介绍声明语句的各个组成部分。
(一)、指定动态库:
Declare语句中的Lib子句用来告诉Visual Basic如何找到包含过程的.dll文件。 如果引用的过程属于Windows核心库(User32、Kernel32或GDI32),则可以不包含文件扩展名,如:
Declare Function GetTickCount Lib "kernel32" Alias "GetTickCount" () As Long
对于其它动态连接库,可以在Lib子句指定文件的路径:
Declare Function lzCopy Lib "c:/windows/lzexpand.dll" _
(ByVal S As Integer, ByVal D As Integer) As Long
如果未指定libname的路径,Visual Basic将按照下列顺序查找该文件:
①.exe文件所在的目录
②当前目录
③Windows系统目录
④Windows目录
⑤Path环境变量中的目录
下表中列出了常用的操作系统环境库文件。
动态链接库描述
Advapi32.dll高级API服务,支持大量的API(其中包括许多安全与注册方面的调用)
Comdlg32.dll通用对话框API库
Gdi32.dll图形设备接口API库
Kernel32.dllWindows32位核心的API支持
Lz32.dll32位压缩例程
Mpr.dll多接口路由器库
Netapi32.dll32位网络API库
Shell32.dll32位ShellAPI库
User32.dll用户接口例程库
Version.dll版本库
Winmm.dllWindows多媒体库
Winspool.drv后台打印接口,包含后台打印API调用。
对于Windows的系统API函数,可以利用VB提供的工具API Viewer查找某一函数及其相 关数据结构和常数的声明,并复制到自己的程序中。
❺ VB究竟怎样调用dll
如何在VB中调用VC编写的DLL
一般来说,VB和VC共同编程有3种方式:一种是VC生成DLL,在VB中调用DLL;一种是VC生成ActiveX控件(.ocx),在
VB中插入;还有一种是在VC中生成ActiveX
Automation服务器,在VB中调用。相对而言,第一种方法对VC编程者的要求最低,但要求你的伙伴进行配合,我推荐这种方法。
先说说
VC++的编程。首先在VC++中生成Win32
DLL工程。在这个工程中添加几个函数供VB用户调用。一个DLL中的函数要想被VB调用,必须满足两个条件:一是调用方式为stdcall,另一个是必
须是export的。要做到第一条,只须在函数声明前加上__stdcall关键字。如:
short__stdcallsample(shortnLen,short*buffer)
要做到第二条,需要在*.def文件中加上如下的几行:
EXPORTS
sample@1
这
里的sample是你要在VB中调用的函数名,@1表示该函数在DLL中的编号,每个函数都不一样。注意这里的函数名是区分大小写的。至于你说的需要传递
大量数据,可以这样做,在VB中用一个数组存放数据,然后将该数组的大小和地址传给VC(至于如何在VB中编程我会在下面介绍)。就象上面的例
子,nLen是数组大小,buffer是数组地址,有了这两条,你可以象使用VC的数组一样进行处理了。至于输出图形,可以生成WMF或BMP格式,让
VB调用。不过,我认为也可以直接输出到视窗,只要VB将窗口的句柄hWnd和hDC以及视窗的绘图位置(VB和VC采用的坐标系必须一致才行)传给VC
就行了。而VB的AutoRedraw属性必须为False,在Paint事件中调用VC的绘图程序。
再谈谈VB的编程。VB调用DLL的方法和调用WindowsAPI的方法是一样的,一般在VB的书中有介绍。对于上面一个例子,先要声明VC函数:
DeclareFunctionsampleLib"mydll.dll"(ByValnLenAsInteger,bufferAsInteger)AsInteger
这里mydll.dll是你的dll的名字。你可能已经注意到了两个参数的声明有所不同,第一个参数加上了ByVal。规则是这样的:如果在VC中某个参数声明为指针和数组,就不加ByVal,否则都要加上ByVal。在VB中调用这个函数采用这样的语法:
sample10,a(0)
这里的a()数组是用来存放数据的,10为数组长度,这里的第二个参数不能是a(),而必须是要传递的数据中的第一个。这是VB编程的关键。
下
面在说几个可能遇到的问题。一个问题是VB可能报告找不到dll,你可以把dll放到system目录下,并确保VB的Declare语句正确。另一个问
题是VB报告找不到需要的函数,这通常是因为在VC中*.def文件没设置。第三种情况是VB告诉不能进行转换,这可能是在VC中没有加上
__stdcall关键字,也可能是VB和VC的参数类型不一致,注意在VC中int是4个字节(相当于VB的Long),而VB的Integer只有2
个字节。必须保证VB和VC的参数个数相同,所占字节数也一致。最后一个要注意的问题是VC中绝对不能出现数组越界的情况,否则会导致VB程序崩溃
1.调用DLL的优越性
动态链接库(DLL)作为Windows操作系统的基础,具有优越的应用性能:
DLL扩展了应用程序的特性。由于DLL能够动态地装入进程的地址空间,因此应用程序能够在运行时确定需要执行什么操作,然后装入相应的代码,以便根据需要执行这些操作。
DLL可以用多种语言进行编写。例如用VB来编写应用程序的界面,而用C++来编写诸如算法、通讯之类的底层操作。
DLL简化了软件项目的管理。如果在软件开发过程中不同的工作小组在不同的模块上工作,那么这个项目管理起来比较容易。
DLL有助于节省内存。如果两个或多个应用程序使用同一个DLL,那么该DLL的页面只要放入RAM一次,所有的应用程序都可以共享它的各个页面。
DLL有助于资源的共享。DLL可以包含对话框模板、字符串、图标和位图等资源,多个应用程序能够使用DLL来共享这些资源。
DLL有助于应用程序的本地化。例如,只包含代码而不包含用户界面组件的应用程序可以加载包含本地化用户界面组件的DLL。
DLL有助于解决平台差异。不同版本的Windows配有不同的函数,开发人员常常想要调用新的函数。但是,如果源代码包含了对一个新函数的调用,而应
用程序将要在不能提供该函数的Windows版本上运行,那么操作系统的加载程序将拒绝运行该进程。如果将这些新函数保存在DLL中,那么应用程序就能够
将它们加载到Windows的老版本上,就可以成功地调用该函数。
2.找到DLL的入口点
初次接触DLL的用户经常会遇到一个问题:在VC环境下创建的DLL,在VC里运行的好好的,可在VB应用程序中调用时却老是出现"调用约定错误"、"找不到入口点"之类的错误。这主要是由以下疏漏造成的。
首先,要注意DLL中的函数和VB中的函数声明在名称、返回类型、参数类型、参数个数等方面必须完全相同,尤其要注意大小写的问题。
其次,在DLL的.def文件中必须加上入口函数。
最后,在函数定义前必须加上extern"c",_stdcall关键字。
具体格式可参看应用实例。
3.数组参数在DLL中的传递
由于DLL经常用来进行一些底层的运算操作,因此应用程序常需要传递大量的数据给DLL。在C++中,指针是进行数组操作的最佳选择,但VB中没有指针的概念。这通常可用两种方法来解决。
其一,在VB中声明DLL时,用byref来代替byval,即可将数组指针传递给DLL。
另外,将数组声明为变体型(variant),即可直接将数组传递给DLL。
4.应用实例
以下通过一具体实例来说明在VB中调用VC环境下创建的DLL的过程。
创建一用于信号处理的DLL,"SigPro.dll",其中有一个用于富氏计算的函数"Fourier"。
VC中的声明:
在"SigPro.h"中加入以下代码,
extern"C"
{
doubleEXPORT_stdcallFourier(longint*Sample,intNumSam,intOvertoneOrder,boolSinOrCos);
}
在"SigPro.cpp"中加入以下代码,
extern"C"
doubleEXPORT_stdcallFourier(longint*Sample,intNumSam,intOvertoneOrder,boolSinOrCos)
{
inti;
doubleresult=0.0;
if(SinOrCos==true)
{
for(i=0;i<NumSam;i++)
{
result=result+*(Sample+i)*cos(OvertoneOrder*i*2*3.1415926/NumSam);
}
}
else
{
for(i=0;i<NumSam;i++)
{
result=result+*(Sample+i)*sin(OvertoneOrder*i*2*3.1415926/NumSam);
}
}
result=result*2/NumSam;
returnresult;
}
在"SigPro.def"中加入以下代码,
EXPORTS
Fourier
VB中的调用声明:
"SigPro"(ByRefSample()AsLong,
ByValNumSamAsInteger,ByValOvertoneOrderAsInteger,ByValSinOrCos
AsBoolean)AsDouble
❻ 怎么用VB编写DLL
打开VB,然后先中“ActiveX Dll”工程,然后开始编辑。
编完后,保存一般是以“.cls”和“.vbw”保存。这时你选择“文件”菜单,弹出下拉框,选中“生成.dll”选项,它就会在上面弹出一个进度条“正在生成.dll文件”。
生成以后是一个有好象齿轮状的图标。如果你要引用,就开一个“标准EXE”工程,然后在“工程”选项中,单击“引用”。
找到你刚才的“.dll”的文件名,在前面的复选框中打勾,就可以引用你刚才在那里面写的方法了。
❼ 急!!!!!!VB如何调用DLL文件
windows api: API Text Viewer
非Com的dll: Depends
Com的dll: 直接在references中选
Public Declare Function InitDLL Lib "你的dll路径和名字" () As Long
❽ VB如何调用dll
在调用自己写的dll之前,想来看看VB是如何调用API的:
OptionExplicit
"user32"Alias"FindWindowA"_
(ByVallpClassNameAsString,ByVallpWindowNameAsString)AsLong
PrivateSubCommand1_Click()
DimHwndAsLong
Hwnd=FindWindow(vbNullString,"Form1")
IfHwnd<>0Then
Debug.Print"窗口的句柄为:"&Hwnd
Else
Debug.Print"参数设置错误或者程序异常"
EndIf
EndSub
以上代码就实现了调用FindWindowAPI 获取窗口标题为“Form1”的句柄,那么,如何调用自己写dll呢?其实,了解过API的同学都知道,API是封装在dll里面的。看到这里还是不懂如何调用dll?别怕,先分析下上面的API声明。
(以下片段来自网友)
经过上面,我们知道如何添加API,接着我们分析一下API声明,这是你了解API必备的。首先看第一个单词Private,很显然,我上面刚刚讲过,这是申明一个私有的API变量。再看第二个Declare,这个单词帮我们告诉VB是在申明API函数,一般申明外在的API函数时都必须带上这个单词。第三个Sub,别告诉我你不知道什么意思?这就是我叫你先学习VB中过程函数的意思,这个说白了就是没有反回值,一般如果不是Sub而是Function都带有反回值的。第四个Lib,这个是告诉VB我们要声明哪一个DLL中的API函数,也就是告诉VB我们要申明第五个单词kernel32.dLL中的API,一般写DLL名称时都要用双引号括起来,如"user32"、"shell32.dll"等,至于后面的.dll这个可以带可不带。再来看第六个Alias,这个也是需要同后面一个一起用的,我们应该把第六个和第七个连起来一起看Alias "Sleep"(这里对应上面的Alias "FindWindowA"
),这个意思表示将被调用的过程在DLL中还有另外的名称,这个是可选的。最后括号里面的,也就是和过程函数一样,你传入相应的值就可以了。
看到这里,知道该怎么用了吧?
还是不太懂?好吧!请往下看:
假设a.DLL在C盘根目录,c和d都是长整形,私有声明如下
Private Declare Function bLib "c:a.dll"_
(ByVal c As Long, ByVal d As Long) As Long
调用:Data1=b(2,3)
好了。
如果上面从网友那里摘抄来的看不懂的话请追问,满意请采纳!
❾ vb.net 调用其他文件 如 dll
DLL(动态链接库)是一个很有用的东西,在开发大项目的时候显得非常重要,因为多人合作开发时,可以给每个人分配一个任务,用DLL完成,最后组合起来,就不会出现互相冲突的问题。这里给出最简单的DLL编写与调用的示例
首先,我们打开VB.NET,选择类库,名称改为test
然后输入以下代码
PublicClasstest
PublicFunctiontest(ByValaAsLong,ByValbAsLong)AsLong
Returna+b
EndFunction
EndClass
保存后,生成DLL文件。
这就是最简单的一个DLL,下面是调用该DLL的示例
新建一个工程,单击“项目” --> 添加引用
找到刚才生成的DLL,双击它
添加引用以后,似乎什么也没发生,这时我们输入以下代码:
Imports test.test
这样,就包含了该DLL的类。
然后我们定义一个类
Dim test As New test.test
这样,就可以使用里面的函数了,下面是程序示例
Importstest.test
PublicClassForm1
PrivateSubForm1_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesMyBase.Load
DimtestAsNewtest.test
MsgBox(test.test(1,2))
EndSub
EndClass
运行该程序,可以看到,调用了DLL内的函数。
这就是最简单的DLL示例,可以将一些复杂的代码集成到DLL里,以后升级或重用都比较方便。