System.Runtime.InteropServices.COMException 类

本文提供了此 API 参考文档的补充说明。

COMException 是从 COM 方法调用返回无法识别的 HRESULT 时引发的异常。

公共语言运行时将已知的 HRESULT 转换为 .NET 异常,使 COM 对象能够将有意义的错误信息返回到托管客户端。 HRESULT 到异常映射还可以通过将特定的 HRESULT 返回到非托管客户端,从而在其他方向工作。 有关映射详细信息,请参阅 如何映射 HRESULT 和异常

当运行时遇到不熟悉的 HRESULT(缺少特定、相应的异常的 HRESULT)时,它会引发类的 COMException 实例。 此全用途异常公开与任何异常相同的成员,并继承包含被调用方返回的 HRESULT 的公共 ErrorCode 属性。 如果运行时可以使用错误消息(从 Visual Basic 中的 IErrorInfo 接口或 Err 对象获取,或者在某些情况下从操作系统获取),则会将消息返回到调用方。 但是,如果 COM 组件开发人员未能包含错误信息,则运行时返回八位数的 HRESULT 代替消息字符串。 使用 HRESULT,调用方可以确定泛型异常的原因。

处理 COMException 异常

下面是对异常进行故障排除的一 COMException 些注意事项。

ErrorCode检查属性:当运行时遇到不熟悉的 HRESULT 并引发COMException异常时,该ErrorCode属性包括错误消息,或者如果错误消息不可用,则为八位 HRESULT 值。 错误消息或 HRESULT 值可以帮助你确定异常的原因。

有关 HRESULT 值的列表,请参阅 常见 HRESULT 值

将后期绑定参数传递给Microsoft 办公室对象的方法时,COMException当对象是 COM 对象时,可能会引发异常。 后期联编程序假定:此类方法调用涉及 ByRef 参数,并且所传递的属性具有 set 访问器。 如果该属性没有,.NET 将生成异常 MissingMethodException (使用 CORE_E_MISSINGMETHOD HRESULT)。 要处理此行为,请使用早期绑定对象或传递变量而不是对象的属性。

COM 用于在 Visual Studio 与 托管进程之间进行通信。 由于它在代码运行之前使用,因此对 CoInitializeSecurity 的调用会导致引发此异常。 在某些情况下,将 Visual Studio 作为 管理员istrator 运行可能会解决此问题。 还可以 禁用托管进程

引发 COMException 异常

尽管可以使用 COMException 该类将特定的 HRESULT 返回到非托管客户端,但引发特定的 .NET 异常比使用泛型异常更好。 请考虑托管客户端和非托管客户端可以使用 .NET 对象,并将 HRESULT 引发到托管调用方比引发异常更不可理解。