2010-06-18 40 views
3

.NET Rocks! Show 561上,Carl和Richard談到了釋放託管代碼中實例化的非託管對象。如果您必須發佈在託管.NET代碼中實例化的COM對象,則必須致電System.Runtime.InteropServices.Marshall.ReleaseComObject。在從COM代碼發佈.NET對象時,是否有類似的事情需要做(或者應該怎麼做),還是僅僅依靠垃圾收集器釋放對象是足夠的?從VB6發佈.NET對象代碼

回答

4

只要您像管理其他COM對象(set netObj = Nothing)一樣管理COM Callable Wrapper的引用計數,COM和.NET將負責其餘的部分。

+1

+1。我只會提到你經常不需要做任何事情。如果'netObj'是一個局部變量,VB6運行時將在程序結束時立即釋放它。如果'netObj'是一個模塊級變量或全局變量,則只需要'設置netObj = Nothing'。 – MarkJ 2010-06-21 12:25:02

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對象被銷燬時事件不會被清零。一些學到的東西很難...