私は、VB6は、VB6は、C#の参照を解放しないで、私はC#のIDisposableで実装しようとしたときに、バインディングを使用してC#を呼び出すVB6のコードを持っています 私は参照を設定しようとしました。何も動作しませんでした。VB6コールC#はリリースしません
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");
}
}
}
なぜC#オブジェクトが解放されないと思いますか? .NETガベージコレクタが確定的でないことを忘れないでください。 – phoog
参照を 'Nothing'に設定するのではなく、VB6コードで' Dispose() 'を明示的に呼び出そうとしましたか? –
VB6コードはサードパーティ製のアプリですので、Dispose()、 への呼び出しを追加できません。C#をビルドしようとしたときにDLLが別のプロセス(VB6)によってロックされていたため、C#を解放しません。 – Xoerk