gpt4 book ai didi

c# - VB6 调用 C# 不释放

转载 作者:太空宇宙 更新时间:2023-11-03 19:24:49 24 4
gpt4 key购买 nike

我有一个使用后期绑定(bind)调用 C# 的 VB6 代码,当 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。

这不是问题。

关于c# - VB6 调用 C# 不释放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9575416/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com