我目前正在使用C++和Excel进行项目。我制作了一个DLL以在Excel中导出C++函数。我的问题是,当我在Excel中测试功能并想修改DLL时,我需要退出Excel,因为它仍在运行.dll文件,而Visual Studio C++无法删除以前的DLL来制作另一个。

每次关闭并再次启动Excel有点烦人,所以我想知道在VBA脚本完成后是否有办法关闭对Dll的访问。

谢谢!

最佳答案

您可以使用的一种方法是运行一个单独的excel实例,并像这样自动执行excel的打开/关闭操作(这是我在浏览器中输入的伪代码)

Sub TestMyDll()
  Dim xl as New Excel.Application
  xl.Workbooks.Open "file"
  xl.Run "MyFunctionCall"
  xl.Workbooks(1).Close False
  xl.Quit
  Set xl = Nothing
End Sub

第二种方法是动态加载和卸载dll。这可能是我会使用的方法。作为测试,我将Winhttp.dll复制到另一个目录,并将其命名为my.dll。不要将dll与包含代码的工作簿放在同一目录中,否则excel可能会加载dll。
Option Explicit

Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long
Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long

'my.dll is a copy of Winhttp.dll in a directory other than where this workbook is saved.
'Calling this will result in an error unless you call LoadLibrary first
Private Declare Function WinHttpCheckPlatform Lib "my.dll" () As Long

Private Sub Foo()
    Dim lb As Long

    lb = LoadLibrary("C:\Users\David\Downloads\my.dll")

    MsgBox WinHttpCheckPlatform

    'I found I had to do repeated calls to FreeLibrary to force the reference count
    'to zero so the dll would be unloaded.
    Do Until FreeLibrary(lb) = 0
    Loop
End Sub

关于c++ - 在Excel中关闭对dll的访问,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15849903/

10-11 22:27
查看更多