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

 

posted @   zionlew  阅读(1381)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示