2010-09-16 107 views
3

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

我有这行代码:

IMyInterface objData = MyCOMClass.GetData(); 

我的问题在这里:

我需要用将发布objData资源? System.Runtime.InteropServices.Marshal.ReleaseComObject(objData);

感谢您的阅读。

+0

可能的重复[在.NET应用程序中清理COM对象的最佳方法](http://stackoverflow.com/questions/3650878/best-way-to-clean -up-a-com-object-in-a-net-application) – Richard 2010-09-16 11:02:37

+0

在这个问题中,我想知道是否需要使用ReleaseComObject清理一个类型为“interface”的对象。因此我发布了一个新问题。谢谢。 – Jimmy 2010-09-16 12:18:13

回答

2

是的,除非您可以等到GC清理干净。

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

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

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

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

+0

感谢adrianm为您的答复。这有助于。 – Jimmy 2010-09-16 12:18:56