【发布时间】:2012-12-03 21:44:37
【问题描述】:
我的 C# 代码使用一个 COM 对象。有时,COM 对象方法将返回 E_OUTOFMEMORY,但它会被转换为 System.OutOfMemoryException 而不是 System.Runtime.InteropServices.COMException,并带有适当的 ErrorCode。这对我来说是个问题,因为它使我的错误处理变得复杂——我希望所有由 COM 对象方法引起的错误指示都被抛出为 System.Runtime.InteropServices.COMException。
当 COM 对象方法返回 E_OUTOFMEMORY 时,是否可以始终拥有 System.Runtime.InteropServices.COMException 而不是 System.OutOfMemoryException?
【问题讨论】:
-
功能,不是错误,你不能关闭它。 OOM 意味着 进程 耗尽了虚拟内存,而不是 COM 服务器。并且同样有可能打击托管分配。处理 OOM 是有问题的,你不能神奇地扩展 VM 大小。它应该在非常靠近调用站点的地方完成,以便您可以恢复程序状态。此时您知道 COM 服务器崩溃了。
-
@Hans Passant:太好了,除了 COM 服务器是 outproc 之外,因此调用过程不太关心它的 OOM 状态。
标签: c# .net com exception-handling com-interop