當我完成使用它(清除代碼完成後)時,需要刪除一個DLL文件。VBA FreeLibrary不會卸載DLL
我嘗試在Excel VBA中使用「LoadLibrary」和「FreeLibrary」,但無論我做什麼,Excel.exe都會緊靠DLL文件。
Public Declare PtrSafe Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long
Public Declare PtrSafe Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
Private Sub Load_Unload_DLL()
Dim lb As Long, pa As Long
lb = LoadLibrary("C:\Users\Administrator\Documents\MathLibrary.dll")
'MsgBox "Library address: " & lb
Dim FreeResult As Long
FreeResult = 1
Do Until FreeResult = 0
FreeResult = FreeLibrary(lb)
Loop
Name "C:\Users\Administrator\Documents\MathLibrary.dll" As "C:\Users\Administrator\Documents\MathLibrary2.dll"
Kill ("C:\Users\Administrator\Documents\MathLibrary2.dll")
End Sub
儘管「FreeResult」等於「0」執行「殺死」時我收到以下錯誤命令:
以及示出的DLL文件確實仍然由加載進程瀏覽器Excel中:
文件可以重命名,但不能刪除(如INDI由代碼提供)。
我錯過了什麼嗎?
FreeLib僅遞減引用計數。檢查FreeLib返回值。如果它不是零,那麼你還沒有真正卸載它。 – cyboashu
@cyboashu謝謝!我已經測試過,並更新了我的代碼來解決這個問題。即使FreeLib返回0,我仍然遇到錯誤。 – Shrout1