【发布时间】:2011-02-13 15:10:27
【问题描述】:
我正在制作一个 C# 将使用的 COM 接口,但是我想知道如何检查 C# 端异常处理的错误。目前我只是为大多数方法返回 HRESTULT 或 bool,然后执行 Marshal.ThrowExceptionForHR 但在其中一些方法中可能会出错,并且返回 E_FAIL 并不能解决问题。
我该怎么做才能返回更多信息?我可以自己制作一个 HRESULT 吗?
【问题讨论】:
我正在制作一个 C# 将使用的 COM 接口,但是我想知道如何检查 C# 端异常处理的错误。目前我只是为大多数方法返回 HRESTULT 或 bool,然后执行 Marshal.ThrowExceptionForHR 但在其中一些方法中可能会出错,并且返回 E_FAIL 并不能解决问题。
我该怎么做才能返回更多信息?我可以自己制作一个 HRESULT 吗?
【问题讨论】:
我从来没有真正做到这一点,但理论上你应该可以通过supporting IErrorInfo 做到这一点。 Marshal.GetExceptionForHR() 有一个采用 IErrorInfo 指针的重载。
顺便说一句,您不必手动调用Marshal.ThrowExceptionForHR() - 如果您的方法返回 HRESULT 和 [out] 参数作为返回值,您可以在 .NET 中将其声明为返回返回值和 set PreserveSig=false 和如果 HRESULT 指示失败,CLR 将自动抛出异常。
【讨论】: