【问题标题】:Translate HRESULT to a readable message将 HRESULT 转换为可读消息
【发布时间】:2011-02-24 05:54:13
【问题描述】:

谁能提供一些关于如何以编程方式将 HRESULT (http://en.wikipedia.org/wiki/HRESULT) 值转换为人类可读消息的信息?

我知道实用程序 ERR.EXE 可以执行此操作,但我的应用需要向我的用户显示一些有意义的消息,而不是神秘的 0x800A03EC。

【问题讨论】:

  • 我在这里遗漏了什么吗?为什么不能使用 Try...Catch 并向用户显示错误消息?
  • @Otaku,我正在进行 Excel VSTO 调用,其中一些调用在失败时将返回 HRESULT,而在 COMException 的消息部分中没有任何其他内容。
  • @ToddMain 因为保存异常 ID 以不立即显示是个好主意。每个班级都不应该知道我是使用 GUI 还是使用终端,以及它是什么类型的 GUI,因此我无法立即显示消息。在 C++ 中,我在每个类中都创建了一个变量«LastError»。这在 C# 中不是一个好主意吗?

标签: c# excel com vsto


【解决方案1】:

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

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

这很可能是 0x800a03ec,它是一个抓包低级 Excel 错误,错误原因很多。你可以通过谷歌搜索“excel error 1004”找到很多匹配项。

【讨论】:

  • 但也许可以使用自定义 HRESULT 再次以某种方式抛出异常?这样异常就会有信息消息等。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2021-11-06
    • 2011-07-07
    • 1970-01-01
    • 2018-09-05
    • 2015-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多