.NET是否定义了常见的HRESULT值?

4
我正在使用C#创建一个COM类,将从非托管的C++调用。我想使用ThrowExceptionForHR,但我不想硬编码HRESULT数字值。
我希望在.Net中有一些通用的HRESULT值的枚举?
换句话说,我在哪里可以找到命名符号,这些符号映射到HRESULT值,以便传递给 ThrowExceptionForHR
更新:
MS在这个页面中谈到了它:管理代码中的HRESULT信息。他们引用VSConstants类Microsoft.VisualStudio.VSConstants,但当我尝试使用它时,它声称该命名空间不存在。

搜索参考源代码?http://referencesource.microsoft.com/#q=E_NOTIMPL - Alex K.
好像有很多! - Mr. Boy
我不认为标记的问题是重复的。我不是特别需要枚举,只是需要任何命名值,以便避免输入原始数字值。正如@AlexK.所指出的,确实存在一些符号,但不清楚我应该使用哪个类。 - Mr. Boy
要使用 VSConstants 类,您必须安装以下包:https://www.nuget.org/packages/Microsoft.VisualStudio.Shell.14.0/ - Rosberg Linhares
1个回答

3

是的,.NET预定义了HRESULT值。如果在使用您的库的托管程序中引发异常,则可以像处理标准.NET异常一样抛出异常。如果匹配明显(例如OutOfMemoryException == 0x800700E),则异常的HResult属性值有时与常见的HRESULT值相匹配,通常情况下为0x8013xxxx值。

这些xxxx的值在CorError.h SDK头文件中广泛记录和列出。IErrorInfo::GetDescription()会给出异常的Message属性值,自动本地化,非常好。无法获取完整的堆栈跟踪。


这是非常有用的信息,但是 - 假设我想/需要使用 ThrowExceptionForHR,.NET 是否有预定义的常见 HRESULT 值符号,我在哪里可以找到它们?我稍微修改了我的问题。 - Mr. Boy
它们被编入各种异常类的源代码中。如果您想查看它,请使用referencesource.microsoft.com。重点是您不应该想要看到它。 - Hans Passant
我可以看到通常情况下是这样的,但事实是,微软提供了这个API方法作为通过interop将失败发送给C++的一种方式。我在这个页面上找到了相关信息:https://msdn.microsoft.com/en-us/library/bb164625.aspx - Mr. Boy
当然,如果您想硬编码 HRESULT 值,可以使用它。但这不是您想要做的。 - Hans Passant
也可以获取堆栈跟踪。 - noseratio - open to work

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