如何让VB调用外部的DLL?

如何让VB调用外部的DLL?,第1张

声明一个DLL过程,首先需要在代码窗口的"通用(General)"部分增加一个Declare语句。如果该过程返回一个值,应将其声明为\x0d\x0aFunction:\x0d\x0aDeclareFunctionpublicnameLib"libname"[Alias"alias"][([[ByVal]variable[Astype][,[ByVal]variable[Astype]]...])]AsType\x0d\x0a如果过程没有返回值,可将其声明为Sub:\x0d\x0aDeclareSubpublicnameLib"libname"[Alias"alias"][([[ByVal]variable[Astype][,[ByVal]variable[Astype]]...])]\x0d\x0a缺省情况下,在标准模块中声明的DLL过程,可以在应用程序的任何地方调用它。在其它类型的模块中定义的DLL过程则是模块私有的,必须在它们前面声明Private关键字,以示区分。下面分别介绍声明语句的各个组成部分。\x0d\x0a(一)、指定动态库:\x0d\x0aDeclare语句中的Lib子句用来告诉VisualBasic如何找到包含过程的.dll文件。如果引用的过程属于Windows核心库(User32、Kernel32或GDI32),则可以不包含文件扩展名,如:\x0d\x0aDeclareFunctionGetTickCountLib"kernel32"Alias"GetTickCount"()AsLong\x0d\x0a对于其它动态连接库,可以在Lib子句指定文件的路径:\x0d\x0aDeclareFunctionlzCopyLib"c:/windows/lzexpand.dll"_\x0d\x0a(ByValSAsInteger,ByValDAsInteger)AsLong\x0d\x0a如果未指定libname的路径,VisualBasic将按照下列顺序查找该文件:\x0d\x0a①.exe文件所在的目录\x0d\x0a②当前目录\x0d\x0a③Windows系统目录\x0d\x0a④Windows目录\x0d\x0a⑤Path环境变量中的目录\x0d\x0a下表中列出了常用的 *** 作系统环境库文件。\x0d\x0a动态链接库描述\x0d\x0aAdvapi32.dll高级API服务,支持大量的API(其中包括许多安全与注册方面的调用)\x0d\x0aComdlg32.dll通用对话框API库\x0d\x0aGdi32.dll图形设备接口API库\x0d\x0aKernel32.dllWindows32位核心的API支持\x0d\x0aLz32.dll32位压缩例程\x0d\x0aMpr.dll多接口路由器库\x0d\x0aNetapi32.dll32位网络API库\x0d\x0aShell32.dll32位ShellAPI库\x0d\x0aUser32.dll用户接口例程库\x0d\x0aVersion.dll版本库\x0d\x0aWinmm.dllWindows多媒体库\x0d\x0aWinspool.drv后台打印接口,包含后台打印API调用。\x0d\x0a对于Windows的系统API函数,可以利用VB提供的工具APIViewer查找某一函数及其相关数据结构和常数的声明,并复制到自己的程序中。

添加一个标准模块,在模块中声明就可以。如

Public Declare Function AccessCheckAndAuditAlarm Lib "advapi32.dll" Alias "AccessCheckAndAuditAlarmA" (ByVal SubsystemName As String, HandleId As Any, ByVal ObjectTypeName As String, ByVal ObjectName As String, SecurityDescriptor As SECURITY_DESCRIPTOR, ByVal DesiredAccess As Long, GenericMapping As GENERIC_MAPPING, ByVal ObjectCreation As Long, GrantedAccess As Long, ByVal AccessStatus As Long, ByVal pfGenerateOnClose As Long) As Long

Public Declare Function AbortPath Lib "gdi32" Alias "AbortPath" (ByVal hdc As Long) As Long

Public Declare Function CloseHandle Lib "kernel32" Alias "CloseHandle" (ByVal hObject 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查找某一函数及其相 关数据结构和常数的声明,并复制到自己的程序中。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11542906.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存