DLLファイルを使用すると、DLLファイルを削除する必要があります(コードが完了したらクリーンアップ)。VBA FreeLibraryはDLLをアンロードしません
私はExcelのVBAで "LoadLibrary"と "FreeLibrary"を使用してみますが、Excel.exeがDLLファイルに何をしていても試してみます。 DLLファイルは実際にまだによってロードされていることを示す
とプロセスエクスプローラ:コマンドを「殺す」を実行するときに、私は次のエラーが表示され、「0」等しい「FreeResult」もかかわらず
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
をエクセル:
ファイルの名前は変更はなく、INDIとして(削除されていないことができますコードに記載されています)。
何か不足していますか?
FreeLibは単に参照カウントをデクリメントお役に立てば幸いです。 FreeLibの戻り値を確認します。ゼロでなければ、実際にアンロードしていない。 – cyboashu
@cyboashuありがとう!私はすでにそれをテストしており、これに対処するためにコードを更新しました。 FreeLibが0を返しても、私はまだエラーに遭遇します。 – Shrout1