如何让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查找某一函数及其相 关数据结构和常数的声明,并复制到自己的程序中。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-11-06
VB中进行32位动态库的声明时,函数名是大小写敏感的。在获得了需要的动态连接 库之后,就可以在VB中进行调用了。但是,由于VB不能验证应用程序传递到动态连接库中的参 数值是否正确,因此VB程序中大量的API调用可能会降低整个应用程序的稳定性,也会增加以 后维护的难度。所以,决定在VB程序中直接调用API函数时要慎重,但适当的使用API调用确实 能够有效地提高VB程序的性能。这之间的平衡需要编程人员根据实际情况来掌握。下面就具体介绍一下在VB中调用API函数时需要做的工作。
  要声明一个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的方法

http://wenku.baidu.com/link?url=wYp78imnde_GNgkHpCVZEluVMzP6ha0CrFCPTCstM8ZRJhN2eI5GV-Ve152aRW6DQerRm6TNKchsX-QF9sQ0ouhS9xY3tdp_oGzip7SyG7_本回答被提问者和网友采纳
相似回答