我有一個遺留的COM組件,我試圖從.NET窗體應用程序中使用它。我使用aximp.exe
爲非託管COM組件創建.NET包裝。然後我使用ISupportInitialize
接口的BeginInit
和EndInit
來創建COM類的一個實例。這工作正常。但是當我嘗試使用Marshal.ReleaseComObject
銷燬對象時,未託管的C++ COM對象的析構函數沒有被調用。我也試過Marshal.FinalReleaseComObject
,但仍然沒有調用析構函數。有人可以告訴我什麼是正確的方法嗎?銷燬.NET應用程序中的COM對象
回答
包裝將執行IDispose
。
WinForm類通常有一個組件集合和一個處理組件的Dispose方法。您可以將對象添加到組件集合中,並將它與表單一起處理。 (你甚至可以讓窗體設計器爲您生成的所有代碼。)
如果你想早做,只是調用對象Dispose
(如在finally
塊或者隱含通過using
語句)。
我只從Dispose調用FinalReleaseCOMObject。 。我手動調用從我的WinForm應用程序Dispos – Asha
你應該讓aximp.exe和系統。它生成的System.Windows.Forms.AxHost派生包裝爲你工作。如果你使用的是Visual Studio或者equiv,讓WinForm設計器爲你的組件的生命週期生成代碼。就像向COM對象添加項目引用一樣簡單,將控件添加到WinForms工具箱並將其拖到窗體。這種方式更易於維護。如果您有特殊情況,請先嚐試這種方式,然後開發您的特殊情況。 –
- 1. 如何銷燬C#中的COM對象?
- 2. 銷燬Android應用程序
- 3. 銷燬對象
- 4. 對象銷燬
- 5. 實時升級.NET應用程序中使用的COM對象
- 6. 銷燬Ember.js中的對象
- 7. 強制進程關閉時,COM對象被銷燬
- 8. Rails 3.1應用程序無法銷燬mysql2對象
- 9. 在應用程序中銷燬會話
- 10. C++銷燬對象
- 11. 銷燬停用對象
- 12. 在X ++中銷燬對象
- 13. 如何銷燬我的應用程序?
- 14. 銷燬對象的::地圖
- 15. 銷燬對象的錯誤
- 16. 停止對銷燬應用
- 17. 在heroku上銷燬應用程序
- 18. 如何銷燬ExtJS應用程序?
- 19. 從Marathon銷燬應用程序將其放入部署中。如何在馬拉松中銷燬應用程序?
- 20. Unity2d - 銷燬對象使用銷燬(gameObject)//它會銷燬與腳本連接的對象
- 21. 如何銷燬線程對象
- 22. 如何銷燬PDFJS對象?
- 23. 如何銷燬java對象?
- 24. RSpec與Factory_girl - 銷燬對象
- 25. Python:全局對象銷燬
- 26. 銷燬Oracle PLSQL對象
- 27. 何時銷燬對象?
- 28. 銷燬主類對象
- 29. 銷燬成員對象
- 30. 如何安全銷燬wxPython應用程序的對話窗口?
這可能意味着您有其他優秀的對象引用。你確定沒有嗎? –
謝謝..但我如何找到其他參考? – Asha
如果你擁有COM對象的實現(並且我猜你有你的系統,那麼析構函數從未被調用過),你可以監視AddRef/Release調用和引用計數。 –