处理 COM Interop 异常

更新:2007 年 11 月

托管代码和非托管代码可以一起工作来处理异常。如果方法引发托管代码中的异常,公共语言运行库可以给 COM 对象传递一个 HRESULT。如果方法在非托管代码中失败,返回一个失败 HRESULT,则运行库引发可被托管代码捕捉的异常。

运行库自动将 HRESULT 从 COM 互操作映射为更特定的异常。例如,E_ACCESSDENIED 变成 UnauthorizedAccessException,E_OUTOFMEMORY 变成 OutOfMemoryException 等。

如果 HRESULT 是自定义结果或者它对于运行库是未知的,则运行库向客户端传递一个一般 COMExceptionCOMExceptionErrorCode 属性包含 HRESULT 值。

有关 COM 互操作的完整讨论,请参见高级 COM 互操作性

使用 IErrorInfo

当从 COM 给托管代码传递错误时,运行库使用错误信息填充异常对象。支持 IErrorInfo 并返回 HRESULT 的 COM 对象将此信息提供给托管代码异常。例如,运行库将说明从 COM 错误映射到异常的 Message 属性。如果 HRESULT 不提供附加的错误信息,则运行库用默认值填充异常的许多属性。

如果方法在非托管代码中失败,则异常可以传递给托管代码段。主题 HRESULT 和异常包含一个表,其中显示了 HRESULT 如何映射到运行库异常对象。

请参见

其他资源

高级 COM 互操作性

处理和引发异常