在.net应用程序中使用Interop时获取COM异常
问题描述:
我有一个C#类,它使用一个使用interop的COM组件。 下面是示例代码:在.net应用程序中使用Interop时获取COM异常
public class MyClass
{
MyCOMClass myObj=null;
try
{
myObj = new MyCOMClass();
for (int num = 0; num < myArr.Length; num++)
{
//Call a method on myObj and do some processing
}
}
catch(Exception ex)
{
//log exception
}
finally
{
if (myObj != null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(myObj);
}
}
}
这里,for循环运行约150倍。
n在catch块中执行此代码时,出现异常: “已从其基础RCW中分离出的COM对象无法使用”。
我试图实现IDisposable接口和然后写Dispose方法:
public class MyClass: IDisposable
{
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(true);
}
protected virtual void Dispose(bool diposeMgdResources)
{
if (!this.disposed)
{
if (diposeMgdResources)
{
if (myObj != null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(myObj);
}
}
this.disposed = true;
}
}
}
从客户端,我然后调用处理这个类,如: myClass.Dispose();
但是,这里仍然有相同的例外。我错过了什么?
感谢您的阅读。
您可以粘贴'//在myObj上调用方法并执行一些处理代码?我的第一个猜测是对象在那里被清理。 – Grzenio 2010-09-14 13:36:37