VB6调用C#未释放

本文关键字:释放 调用 VB6 | 更新日期: 2023-09-27 18:26:42

我有一个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

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");
        }
    }
}

VB6调用C#未释放

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

这不是问题。