我正在Excel的VBA脚本中实例化一个COM对象,该对象由C# dll定义。我实例化的C#类有一个终结器,执行垃圾回收,特别是它引用的其他MS Office对象,在任务管理器中应该能看到这些对象出现和消失的情况。实际上,单元测试证明当dll被调用时会出现Office进程,并在完成后消失。
当从VBA调用dll时,我注意到进程在VBA函数结束后仍然保持打开状态,即在调用后未清除对象,这使我相信VBA没有释放COM对象。
我的函数大致如下:
我已经在函数末尾添加了以下代码来解决这个问题:
当从VBA调用dll时,我注意到进程在VBA函数结束后仍然保持打开状态,即在调用后未清除对象,这使我相信VBA没有释放COM对象。
我的函数大致如下:
Function Raz(inp As String)
Dim o: Set o = CreateObject("foo.bar")
o.InputFields.FirstInput = inp
o.Update
Raz = o.OutputFields.FirstOutput
End Function
我已经在函数末尾添加了以下代码来解决这个问题:
set o = Nothing
然而,在我的COM进程中使用的资源在执行和完成VBA脚本后仍然存在。如何在不手动创建dispose调用的情况下从VBA垃圾回收我的COM对象?