如何強制Excel(2007)VBA釋放對COM服務器對象的引用?如何從Excel VBA中釋放進程內COM服務器對象
我已經在我的開發機器上從Excel 2007 VBA代碼實例化了Visual Foxpro 9 SP2中編寫了一個inprocess(單實例DLL)COM服務器。即使我將它設置爲= Nothing,Excel似乎仍持有對COM對象/ dll的引用。這可以防止我由於「文件訪問被拒絕TestCOM.dll」消息而重建DLL,直到我退出Excel,每次我想進行更改和測試時都很痛苦。
我煮完代碼到一個非常簡單的測試設置: 的VFP9項目(TestCOM)具有下列內容
DEFINE CLASS TestClass As Session OLEPUBLIC
ENDDEFINE
VBA代碼如下所示只是一個.prg文件:
Sub Test()
Set objTest = CreateObject("TestCOM.TestClass")
Set objTest = Nothing
End Sub
我已經嘗試刪除在VBA項目中的COM服務器庫的引用,但這並沒有任何區別。 我已經試過,沒有DIMing對象變量,它沒有區別。 我曾嘗試創建一個新的VFP DLL項目,但問題依然存在。
如果我將VFP application/dll構建爲INPROCESS/DLL並運行VBA代碼,則會出現此問題,但如果將其構建爲OUTOFPROCESS/EXE並運行VBA代碼,則不會出現此問題。
我在COM Object Cleanup中發現了一個非常類似的問題,只是我的COM服務器是用Visual Foxpro 9 SP2編寫的,而這涉及到C#,OP沒有詳細解釋他們如何解決問題,所以我不知道如何繞過它;如果這甚至是可能的。
對於任何人閱讀此線程我後來意識到,如果該項目建成爲一個進程外(EXE)COM服務器,那麼你只能重建項目如果您沒有在VBA/Excel中引用類型庫,則不退出Excel。 – Caltor