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)
这根本不是内存管理在托管代码中的工作方式.规则不会因为您将其作为[ComVisible]类公开而更改.您的vb6代码将释放CCW(COM可调用包装器).但这只是删除了对C#对象的引用.在垃圾收集器运行之前,对象不会被销毁并且终结器不会运行.在程序终止之前,在您发布的代码段中不会发生这种情况,您没有分配足够的托管对象来触发GC.
这不是问题.
| 归档时间: |
|
| 查看次数: |
448 次 |
| 最近记录: |