将HRESULT翻译成可读的消息

5

有没有人能提供如何以编程方式将HRESULT (http://en.wikipedia.org/wiki/HRESULT)值转换为易于阅读的消息的信息?

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


我在这里漏掉了什么吗?为什么你不能使用 Try...Catch 并向用户显示错误消息呢? - Todd Main
@Otaku,我在进行Excel VSTO调用,在某些失败的情况下,这些调用将返回一个HRESULT,但在COMException的消息部分中没有其他内容。 - code4life
@ToddMain 因为保存异常 ID 并不立即显示它是一个好主意。每个类都不应该知道我是在使用 GUI 还是终端,以及使用的是什么类型的 GUI,因此我不能立即显示消息。在 C++ 中,我在每个类中都创建了一个变量 "LastError"。在 C# 中这样做是否也是一个好主意呢? - Hi-Angel
2个回答

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

3
没有内置的支持来生成具有该值的HRESULT的消息。COM组件需要自己实现,使用IErrorInfo接口。
.NET中内置的CLR互操作支持已经自动完成了这一点,你不需要帮忙。当它看到COM接口方法返回失败代码时,它会自动抛出适当的异常。Message属性从IErrorInfo初始化。如果没有得到像样的消息,则COM服务器就没有提供它。
这很可能是0x800a03ec,它是一个带有许多错误原因的低级Excel错误。你可以通过谷歌搜索“excel error 1004”找到大量相关信息。

但也许可以通过自定义 HRESULT 再次抛出异常?这样,异常将会带有信息消息等。 - Hi-Angel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接