COM互操作问题

3

我将在我的 C# 应用程序中使用 COM 互操作。

这是我的代码:

IMyInterface objData = MyCOMClass.GetData();

我的问题是:

我是否需要使用System.Runtime.InteropServices.Marshal.ReleaseComObject(objData);释放objData上的资源?

谢谢阅读。


可能是在.NET应用程序中清理COM对象的最佳方法的重复问题。 - Richard
在这个问题中,我想知道一个类型为“接口”(与类相对)的对象是否也需要使用ReleaseComObject进行清理。因此,我发布了一个新的问题。谢谢。 - Jimmy
1个回答

2

是的,除非您可以等待垃圾回收清理它。

值得注意的是,COM互操作会为每个接口创建一个COM引用。

IMyInterface x = MyCOMClass.GetData();
IMyOtherInterface y = (IMyOtherInterface)x;
IMyInterface z = x;

Marshal.ReleaseComObject(x);
Marshal.ReleaseComObject(y);

或者使用Marshal.FinalReleaseComObject(x); // 如果你知道没有其他人在使用它


感谢adrianm的回复,这很有帮助。 - Jimmy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接