【问题标题】:Does .NET define common HRESULT values? [duplicate].NET 是否定义了常见的 HRESULT 值? [复制]
【发布时间】:2015-10-09 11:08:54
【问题描述】:

我正在用 C# 创建一个 COM 类,它将从非托管 C++ 中调用。我想使用ThrowExceptionForHR,但我不想硬编码 HRESULT 数值。

我期待在 .Net 的某个地方会有一些常见的 HRESULT 值的枚举?

换句话说,我在哪里可以找到映射到 HRESULT 值的命名符号以传递给ThrowExceptionForHR

更新:

MS 在此页面中讨论它:HRESULT Information in Managed Code。他们引用了 VSConstants 类 Microsoft.VisualStudio.VSConstants,但是当我尝试使用它时,它声称命名空间不存在。

【问题讨论】:

标签: c# .net com .net-4.0 com-interop


【解决方案1】:

是的,.NET 预定义了 HRESULT 值。您通过帮助来使用它们,就像托管程序使用您的库时一样,抛出一个标准的 .NET 异常。如果匹配很明显(例如 OutOfMemoryException == 0x800700E),异常的 HResult 属性值有时会匹配一个常见的 HRESULT 值,通常是 0x8013xxxx 值。

xxxx 值被广泛记录并列在 CorError.h SDK 头文件中。 IErrorInfo::GetDescription() 为您提供异常的 Message 属性值。自动本地化,不错。您无法获得神圣的堆栈跟踪。

【讨论】:

  • 这是非常有用的信息,但是 - 假设我想要/需要使用 ThrowExceptionForHR .NET 是否为常见的 HRESULT 值预定义了符号,我在哪里可以找到它们?我相应地编辑了我的问题。
  • 它们被嵌入到各种异常类的源代码中。如果您想查看,请使用 referencesource.microsoft.com。关键是你不应该想看到它。
  • 我可以看到通常是这种情况,但事实是,MS 提供此 API 方法作为通过互操作将故障发送到 C++ 的一种方式。我找到了这个页面:msdn.microsoft.com/en-us/library/bb164625.aspx
  • 当然,如果你想硬编码一个 HRESULT 值,你可以使用它。你不想做的事情。
  • get the stack trace也可以。
猜你喜欢
  • 2018-10-15
  • 1970-01-01
  • 2015-10-02
  • 2013-12-24
  • 2012-04-27
  • 2011-11-26
  • 2011-02-12
  • 2017-07-12
  • 1970-01-01
相关资源
最近更新 更多