在.NET Rocks! Show 561上,Carl和Richard談到了釋放託管代碼中實例化的非託管對象。如果您必須發佈在託管.NET代碼中實例化的COM對象,則必須致電System.Runtime.InteropServices.Marshall.ReleaseComObject
。在從COM代碼發佈.NET對象時,是否有類似的事情需要做(或者應該怎麼做),還是僅僅依靠垃圾收集器釋放對象是足夠的?從VB6發佈.NET對象代碼
3
A
回答
4
只要您像管理其他COM對象(set netObj = Nothing
)一樣管理COM Callable Wrapper的引用計數,COM和.NET將負責其餘的部分。
3
我還會補充一點,如果你使用VB6的事件,你會想在你的DotNet代碼中添加一個函數來釋放事件。例如:
class SomeEventClass
{
public event EventHandler SomeEvent;
public void DoSomething()
{
var someEvent = SomeEvent;
if (someEvent != null)
{
someEvent(this, new EventHandlerArgs());
}
}
public void ReleaseFromEvents()
{
SomeEvent = null;
}
}
這是必要的,因爲有時當VB6對象被銷燬時事件不會被清零。一些學到的東西很難...
相關問題
- 1. 發佈代理對象
- 2. 在.NET中解析VB6代碼
- 3. VB6 .NET互操作對象需要
- 4. .NET強制COM對象發佈
- 5. 發佈對象從Silverlight的
- 6. .NET - 從代碼
- 7. 通過互操作將VB6對象傳遞給.NET對象?
- 8. 嘗試從VB6創建.NET對象時出錯
- 9. 通過分佈式對象代替代理髮送對象
- 10. 發佈對象?
- 11. 對象引用未設置爲對象的實例c# - 代碼發佈
- 12. 發佈設計代碼以管理對象
- 13. VB6代碼升級
- 14. 搜索VB6代碼
- 15. 發佈代碼Pypi
- 16. 從VB6代碼轉換爲C#-System.Variant.Marshal助手轉換對象要變」
- 17. 發送到發佈對象的消息(從未手動發佈)
- 18. 發佈COM對象
- 19. 發佈Com對象
- 20. 從Visual Studio 2012調試VB6代碼
- 21. 從Visual Studio 2010調試VB6代碼
- 22. 無法調用COM +從VB6代碼
- 23. 參數或從vb6調用sql代碼
- 24. 從代碼發佈圖像到blobstore appengine?
- 25. 從Silverlight發佈獲取代碼?
- 26. 從C#發佈html表單代碼
- 27. 如何發佈從.net
- 28. WordPress發佈後發佈HTML代碼
- 29. 發佈時從特定Twitter帳戶發佈帖子的代碼?
- 30. 從Azure Web App獲取上次發佈的代碼發佈
+1。我只會提到你經常不需要做任何事情。如果'netObj'是一個局部變量,VB6運行時將在程序結束時立即釋放它。如果'netObj'是一個模塊級變量或全局變量,則只需要'設置netObj = Nothing'。 – MarkJ 2010-06-21 12:25:02