从VB6代码中释放.NET对象

时间:2010-06-18 20:08:41

标签: .net com vb6 interop

.NET Rocks! Show 561上,Carl和Richard谈到了释放在托管代码中实例化的非托管对象。如果必须释放在托管.NET代码中实例化的COM对象,则必须调用System.Runtime.InteropServices.Marshall.ReleaseComObject。从COM代码中释放.NET对象时,是否有类似的事情要做(或应该做),还是依靠垃圾收集器来释放对象呢?

2 个答案:

答案 0 :(得分:4)

只要您管理COM Callable Wrapper的引用计数,就像执行任何其他COM对象(set netObj = Nothing)一样,COM和.NET将负责其余的工作。

答案 1 :(得分:3)

我还想补充一点,如果您使用VB6中的事件,您将需要在DotNet代码中添加一个函数来释放事件。 E.g:

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对象时事件不会被清除为null。有些东西学得很难......