VBA中如何调用DLL使用WindowsAPI
什么是DLL,API
DLL(Dynamic Link Library,动态链接库):
DLL 是一个库,其中包含可同时由多个程序使用的代码和数据。
API(Application Programming Interface,应用程序编程接口):
API只是一组函数,可用于处理组件、应用程序或操作系统。通常,API由一个或多个提供某种特定功能的DLLs组成。
window提供的DLL有很多种,比如:
Kernel32.dll 低级操作系统功能,例如用于内存管理和资源处理的功能
User32.dll Windows 管理功能,例如用于消息处理、计时器、菜单和通信的功能
GDI32.dll 图形设备接口 (GDI) 库,其中包含设备输出功能,例如用于绘图、显示上下文和字体管理的功能
由于这些函数都是有C/C++编写的,在调用这些函数时候需要进行声明,
声明方法:
[Public|Private]Declare Sub name Lib "libname" [Alias "aliasname"][([arglist])] [Public|Private]Declare Function name Lib "libname" [Alias "aliasname"] [([arglist])] [As type]
name: 方法名
libname:dll名字,多在系统目录(C:\Windows\System32)下
aliasname :dll中的方法名,这个名字后面有的带A,有的带W ,指的是ANSI 版本和 Unicode 版本,尽管vba使用的是unicode的编码,但调用dll时候要是ANSI版本
例如,下面是取得系统临时文件夹的声明
1 Private Declare Function GetTempPath Lib "kernel32" Alias "GetTempPathA" _ 2 (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long
使用例:
1 Sub testGetTempPath() 2 3 Dim sPath As String * 100 4 Dim iLen As Long 5 Dim rtn As Long 6 7 iLen = 255 8 rtn = GetTempPath(iLen, sPath) 9 10 Debug.Print "rtn : " & rtn 11 Debug.Print "iLen : " & iLen 12 Debug.Print "sPath : " & sPath 13 14 End Sub
输出结果:
rtn : 31 iLen : 255 sPath : C:\Users\LH\AppData\Local\Temp\
这个函数的官方文档里详细的记载了该方法的语法,参数,返回值,库名等信息。
GetTempPathA function (fileapi.h) - Win32 apps | Microsoft Docs
需要注意的是:
由于vba变量可以定义为变体型(viriant),但调用这些函数的时候要明确指定变量的类型和长度,否则容易引起代码卡死,执行先要先保存。
比如:对于C中的指针类型,在vba中被定义成long类型,关于类型的定义:
更多关于Windows提供的API可以在下面进行查看
Windows API index - Win32 apps | Microsoft Docs
参考文档:Office VBA and the Windows API | Microsoft Docs
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!