VB6调用C#不释放

Xoe*_*erk 1 c# vb6 idisposable

我有一个VB6代码,通过使用后期绑定调用C#,当C#完成VB6不释放C#引用时,我尝试在C#IDisposable中实现我尝试将引用设置为空,但它不起作用

是否有可能VB6代码没有发布ref?有没有其他方法来释放所有对C#代码的引用?我可能会使用任何注释吗?

为了给出整个故事,VB6是第三方代码,我无法添加功能/代码调用.

谢谢X

VB6

Private Sub Command1_Click()
    Dim obj As Object
    Set obj = CreateObject("test1.class1")
    obj.msg
    Set obj = Nothing
End Sub
Run Code Online (Sandbox Code Playgroud)

C#

namespace test1
{
    [ClassInterface(ClassInterfaceType.None)]
    public class Class1 : IDisposable
    {
        public void msg()
        {
            Console.Write("msg");
        }
        ~Class1()
        {
            Console.Write("~Class1");
        }

        public void Dispose()
        {
           Console.Write("Dispose");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Han*_*ant 6

这根本不是内存管理在托管代码中的工作方式.规则不会因为您将其作为[ComVisible]类公开而更改.您的vb6代码将释放CCW(COM可调用包装器).但这只是删除了对C#对象的引用.在垃圾收集器运行之前,对象不会被销毁并且终结器不会运行.在程序终止之前,在您发布的代码段中不会发生这种情况,您没有分配足够的托管对象来触发GC.

这不是问题.