我從Excel中定義的C#DLL中的VBA腳本實例化COM對象。我實例化的C#類有一個執行垃圾回收的終結器,特別是它引用的其他MS Office對象,我應該看到它出現並消失在任務管理器中。實際上,單元測試表明Office進程在調用dll時出現,並在完成時消失。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
然而,資源我在執行和完成我的VBA腳本後,COM進程仍然保留。如何從VBA中收集我的COM對象而無需手動創建處置調用?
所以我試過了,終結者仍然沒有被調用。我最終實現了IDisposable和手動配置資源,並結合set o = Nothing行......我不知道是否所有的東西都被釋放了,但至少這個配置釋放了大事情。 – tbischel 2010-11-15 21:21:07
您能否介紹一下如何實現IDisposable的更多解釋?我用我編寫的Visual Foxpro 9 COM服務器也有同樣的問題。謝謝。 – Caltor 2011-09-07 10:55:43
@Caltor,你需要'@tbischel'來引起他的注意(只有第一個@可以工作,所以你仍然需要自己去做)。 – 2011-09-07 14:14:37