处理 COM 互操作异常
托管代码和非托管代码可以一起工作来处理异常。 如果方法引发托管代码中的异常,公共语言运行时可以给 COM 对象传递一个 HRESULT。 如果方法在非托管代码中失败,返回一个失败 HRESULT,则运行时引发可被托管代码捕捉的异常。
运行时自动将 HRESULT 从 COM 互操作映射为更特定的异常。 例如,E_ACCESSDENIED 变成 UnauthorizedAccessException,E_OUTOFMEMORY 变成 OutOfMemoryException 等。
如果 HRESULT 是自定义结果或者它对于运行时是未知的,则运行时向客户端传递一个一般 COMException。 COMException 的 ErrorCode 属性包含 HRESULT 值。
有关 COM 互操作的完整讨论,请参见高级 COM 互操作性。
使用 IErrorInfo
当从 COM 给托管代码传递错误时,运行时使用错误信息填充异常对象。 支持 IErrorInfo 并返回 HRESULT 的 COM 对象将此信息提供给托管代码异常。 例如,运行时将说明从 COM 错误映射到异常的 Message 属性。 如果 HRESULT 不提供附加的错误信息,则运行时用默认值填充异常的许多属性。
如果方法在非托管代码中失败,则异常可以传递给托管代码段。 主题 HRESULT 和异常包含一个表,其中显示了 HRESULT 如何映射到运行时异常对象。