什么是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