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