2023年11月29日发(作者:)

交叉引⽤:标准异常和错误代码对照表

简介

此表旨在帮助将Windows运⾏时应⽤程序错误代码交叉引⽤到标准异常,这些异常可以作为应⽤程序异常处理技术的⼀部

分。

对照表

.NET Exception (Namespace)

HRESULT(s) - symbolic

HRESULT(s) - raw

AccessViolationException

ArrayTypeMismatchException

CannotUnloadAppDomainException

COR_E_DLLNOTFOUND

0x80131047

0x8013141b

INET_E_DOWNLOAD_FAILURE

COR_E_INVALIDOPERATION

0x80131481

MissingFieldException

0x8013153b

0x8013150a

0x80131604

0x80070005

XamlParseException ()

(none)

0x802b000a

说明

在上表的“.NET异常列中,如果链接了异常名称,则该异常是.NET for Windows运⾏时应⽤程序类的⼀部分。这意味着您可以在⾃⼰的代码

中引发该类型的新异常。或者您可以捕获这些异常,特别是作为try-catchUnhandledException异常处理的⼀部分。如果未链接异常名称,

则该异常不属于.NET for Windows运⾏时类的⼀部分。不属于.NET for Windows运⾏时集的异常可能在某些互操作⽅案中遇到,也可能来⾃

系统或Windows运⾏时内部。您将⽆法使⽤该特定异常类型为它们编写捕获块,因为您为Windows运⾏时应⽤程序运⾏的.NET库不知道该

类型。但是您仍然可以读取⼀个HRESULT代码,从“HRESULTs-raw:”列中查找它,并注意到有⼀个对应的.NET异常。或者你可以把它

当作⼀般的例外。然后,您可以阅读.NET⽂档,或许可以了解有关该异常的意图以及原始代码引发该异常的原因的更多信息,即使该异常

未在.NET for Windows运⾏时类型中表⽰。如果没有为.NET异常列出命名空间,则它来⾃系统命名空间。

“HRESULTs-symbolic”列中列出的常量来⾃多种来源。有些是在winerror.h中定义的,有些是在特定于组件对象模型(COM)编程的头

⽂件中定义的,有些是在属于Windows特定⼦系统的头⽂件中定义的。有些需要HRESULT_From_Win32宏⽤法,其中包含来⾃更早的常量

集的代码(前⾯是ERROR_)。对于使⽤.NET语⾔时的典型Windows运⾏时编程,这些头⽂件不是作为项⽬的⼀部分提供的。如果您正在

获取系统⽆法映射到标准异常的情况下的错误代码信息,则可能会将其视为原始整数或⼗六进制值,并且不会⾃动⽀持将数字代码别名为

Windows命名的常量值。尽管如此,在以前的Windows错误报告系统的基础上,仍然存在按其命名常量⽽不是原始代码引⽤错误代码的历

史。您可以使⽤表中的命名常量进⼀步研究其他⽂档源(如论坛或⽀持⽂档)中的错误,特别是该错误对桌⾯编程、Microsoft Win32

COM等意味着什么。

SystemException:在原始的.NET异常层次结构中,许多异常是从系统异常派⽣的。例如,从SystemException派⽣的

ntException。从SystemException继承表明.NET核⼼定义了异常。Windows运⾏时的.NET类集合中未包含系统异常。所有

在完整框架下从SystemException派⽣的异常都是从ion派⽣的。

COMException:NET⽂档建议对任何⽆法识别的HRESULT抛出COMException,但这不是Windows运⾏时应⽤的⾏为。相

反,COMException通常是⽤于源于组件的未映射异常的标准异常。来⾃您⾃⼰的应⽤程序代码或系统的未映射异常报告为基本异常,其

HResult值不标准。

ExternalException:不包含在.NET for Windows运⾏时中。对于确实存在的异常(如SEHException),在层次结构中看不到这⼀点。