2010-05-26 87 views
5

任何人都可以提供有关如何以编程方式将HRESULT(http://en.wikipedia.org/wiki/HRESULT)值转换为人类可读消息的信息吗?将HRESULT转换为可读消息

我知道实用程序ERR.EXE可以做到这一点,但我的应用程序需要向用户显示一些有意义的消息,而不是一个神秘的0x800A03EC。

+0

我在这里错过了什么吗?为什么不能使用'Try ... Catch'并向用户显示错误信息? – 2010-05-26 15:19:16

+0

@Otaku,我正在进行Excel VSTO调用,其中一些调用会在失败时返回HRESULT,而在COMException的消息部分中则没有其他调用。 – code4life 2010-05-26 20:18:37

+0

@ToddMain,因为保存一个异常ID以便不会立即显示它是一个好主意。每个班级都不应该知道我是使用GUI还是使用终端,以及它是什么类型的GUI,因此我无法一次显示消息。在C++中,我在每个类中都创建了一个变量«LastError»。在C#中这不是一个好主意吗? – 2014-10-03 15:54:35

回答

3

没有内置支持从具有该值的HRESULT生成消息。 COM组件需要使用IErrorInfo接口来实现它自己。

.NET中内置的CLR互操作支持已经自动完成了,你永远不需要帮助。当它看到一个COM接口方法返回一个失败代码时它会自动抛出一个适当的异常。 Message属性从IErrorInfo初始化。如果你没有任何象样的消息,那么COM服务器就不提供它。

这可能是0x800a03ec,它是一个带有许多错误原因的抓包低级别Excel错误。您可以通过使用Google搜索“excel error 1004”找到大量点击。

+0

但也许有可能用自定义HRESULT再次抛出异常?这样,例外情况就会有一条信息消息等。 – 2014-10-03 16:02:34

3

您是否试过FormatMessage函数?您可以使用PInvoke机制从C#中使用它。