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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM