VB如何调用dll函数

作者&投稿:虿录 (若有异议请与网页底部的电邮联系)
vb编程怎么调用.Dll库函数~

vb编写的dll:
注册dll,引用dll,private xxx as dll中的类名,在form_load中初始化:set xxx = new dll中的类名
或:
注册dll,set xxx = createobject("工程名.类名")
vc 编些的标准dll:
private|public declare function|sub 函数名 lib "dll名" [Alias "dll中的函数名"](参数) as 返回值类型
例:
Declare Function BitBlt Lib "gdi32" Alias "BitBlt" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long

要声明一个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查找某一函数及其相 关数据结构和常数的声明,并复制到自己的程序中。

静态调用简单,动态调用麻烦;静态调用占用资源多,动态调用占用资源少。

静态调用就是常用的申明API,一个DLL库里有很多的函数可供调用,把要用的申明即可。比如:Public/Private Declare Function [函数名] Lib "DLL文件名" [Alias "别名"] (参数变量表) [As 返回值的数据类型]

示例:Private Declare Function Test Lib "dll.dll" (x As String) As String

当程序结束的时候系统回自动释放DLL调用。

动态调用使用LoadLibery(DLL名),系统会检查DLL是否调入内存。如果调入了,可直接调用DLL里的所有函数,没有就会把DLL加入目标进程的进程空间。通过函数GetProcAddress确定函数入口地址,然后调用,后一种方法VB里不常用的。

扩展资料

静态调用详解:

制作好DLL之后,首先用Declare声明语句在窗体级或模块级或全局模块的代码声明段进行声明,将动态链接库中的函数声明到VB中,供VB程序调用。

语法格式1:

Public/Private Declare Sub [函数名] Lib "DLL文件名" [Alias "别名"] (参数变量表)

语法格式2:

Public/Private Declare Function [函数名] Lib "DLL文件名" [Alias "别名"] (参数变量表) [As 返回值的数据类型]

在声明中首先用Declare关键字表示声明DLL中的函数。在C语言中有的函数类型为VOID,它表示不具有返回值,则必须用关键字Sub将其声明成过程。有的函数具有返回值,则必须用关键字Function将其声明成函数,并且在声明语句的最后要用AS关键字指明函数返回值的类型。

例如add.DLL在VB中就可以声明为:

Declare Function ADD Lib "c:\add.dll" (ByVal X AS Integer, ByVal Y AS Integer, ByVal filein as string) AS Integer

通过此声明语句将函数ADD声明到VB中,便可直接调用。

































1.在工程-引用中将asdfg.dll引用过来
2.dim AAA as asdfg 'asdfg是类模块的名称
Private Sub Form_Load()
dim x
Set AAA = New asdfg
x = AAA.zxc(参数1,参数2)'参数1,2自己写
End Sub

建议你了解一下下面dll的制作方法,理解就更透彻了。下面内容来自百度。

1.新建一个ActiveX Dll,工程名字为vbmytestdll,类模块名字为mytestdll
2.类模块内容只有一个函数,主要返回DLL的HELLO WORLD
Public Function dlltest1() As String
dlltest1 = "HELLO WORLD"
End Function

3.保存,生成DLL,名字为

vbmytestdll.dll

4.新建一个EXE工程,在菜单: 工程---引用---浏览里找到vbmytestdll.dll,把它引用进来

5.EXE工程代码如下:

Option Explicit
Dim testdll As mytestdll'类模块名字

Private Sub Form_Load()
Set testdll = New mytestdll 'DLL的一个新实例
Me.Caption = testdll.dlltest1 '我的标题=返回DLL的HELLO WORLD
End Sub

OK,编译成EXE即可看到效果.

1.新建一个ActiveX Dll,工程名字为vbmytestdll,类模块名字为mytestdll
2.类模块内容只有一个函数,主要返回DLL的HELLO WORLD
Public Function dlltest1() As String
dlltest1 = "HELLO WORLD"
End Function

3.保存,生成DLL,名字为

vbmytestdll.dll

4.新建一个EXE工程,在菜单: 工程---引用---浏览里找到vbmytestdll.dll,把它引用进来

5.EXE工程代码如下:

Option Explicit
Dim testdll As mytestdll'类模块名字

Private Sub Form_Load()
Set testdll = New mytestdll 'DLL的一个新实例
Me.Caption = testdll.dlltest1 '我的标题=返回DLL的HELLO WORLD
End Sub

1、右击工程》添加引用 把你的dll文件添加进去
2、然后你定义一个变量作为dll中函数类型的,将变量实例化,最后在调用方法



VB调用DLL文件,怎么在VB里编写代码,DLL文件有,说明和使用步骤也有,我是...
答:VB中使用API之前,需要先对API进行声明,声明的方法是使用Declare关键字,如:Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long 声明了一个名为SendMessage的API函数。许多API的...

vb怎么制作DLL并且VB调用
答:先给你说说VB调用dll文件吧 以系统中的scrrun.dll文件的调用为例,这是VB中的文件系统FileSystemObject的dll,调用之前需要注册,注册方法,先将scrrun.dll复制到C:\WINDOWS\system32文件夹下,然后点“开始”-->“运行”,输入 regsvr32 C:\WINDOWS\system32\scrrun.dll 注册成功后就可以引用了,引用 ...

VB调用DLL的问题,急急急
答:对于要传出的字符串,最安全的做法是先建立字节数组,然后传递给dll函数首字节地址。声明为:Public Declare Function ReadCardInfo Lib "card.dll" (ByVal ComPort As Integer, CardNum As byte, CardNum1 As byte, CardID As byte, CardType As long, ExpireDay As byte) As Integer 调用时...

vb调用dll
答:vb生成的dll 不是标准的 dll,不能这样引用:private declare function shuangquzhengge lib "C:\math.dll"在你的另一工程中, 点击“工程”菜单下的“引用”,勾选你的 dll 将 private declare function shuangquzhengge lib "C:\math.dll" 改为:Dim Mydll As New My1 注意:My1 要换成...

求VB调用DLL声明
答:调用约定问题,你采用WINAPI调用约定 --- 重写这个输出函数,采用标准,我习惯用def导出函数 例:WINAPI int fun1(int a){ return 1;} 在.def文件里面添加函数名

VB6.0怎么调用C++封装DLL中的回调函数
答:Import System.Runtime.InteropServicesPublic Class Form1'声明一个委托代理Delegate SUB myDelegate (Byval retVal AS Interger)'声明DLL中接口函数<DllImport (test.dll, CharSet:=CharSet.ansi, CallingConvertinon:=CallingConvertion.Cdecl) Public Shared Function getSum(Byval a as Integer,Byval ...

VB如何调用RES资源中的标准DLL文件的函数命令?
答:Dim a() As Byte If Dir(App.Path & "\文件名.dll") = "" Then a = LoadResData(101, "CUSTOM")Open App.Path & "\文件名.exe" For Binary As #1 Put #1, , APP1 Close #2 End If

vb如何调用AA.DLL文件中的BB函数???
答:1.在工程-引用中将AA.DLL引用过来 2.dim ABC as AA 'AA是类模块的名称 Private Sub Form_Load()dim x Set ABC = New AA x = ABC.bb(参数1,参数2)'参数1,2自己写 End Sub

VB6中怎样调用DLL文件的内容呀
答:vb只能调用标准dll文件。和调用windows API类似,声明后即可调用。具体可参见msdn,那里讲的更详细。

VB调用外部DLL问题
答:1.从网上下来的组如何使用:把组件放到你想放的位置,比如D盘123目录下,加入你的组件名称为abc.dll那么现在 在开始》》运行处敲入:regesvr32.exe D:\123\abc.dll提示注册组件成功,你就可以调用了。如果你经常使用该组件,就把他放到C:\WINDOWS\system32这个目录下,然后直接调用regesvr32.exe abc...