将参数异常转换为HRESULT

本文关键字:HRESULT 转换 异常 参数 | 更新日期: 2024-10-19 08:12:06

我正在开发一个Microsoft.NET程序集,供Microsoft.NET和COM组件使用。我正在编写托管代码,并且必须指示何时为类中的方法指定了不正确的参数。当发生参数异常时,我需要将控件返回到COM组件,并返回正确的错误。

假设代码为:

throw new ArgumentException("Invalid Argument");

我猜代码抛出了一个新的ArgumentException对象,它可以由Microsoft.NET组件按原样使用,并由CLR转换为COM组件的HRESULT。托管代码将错误或异常事件指示为异常,而COM组件除了被称为HRESULTs的十六进制错误代码之外。

我的问题是这个ArgumentException的十六进制值是多少?如果是COR_E_ARGUMENT或E_ INVALIDARG,那么这与指定的错误消息无关?(此处为"无效参数")

将参数异常转换为HRESULT

COR_E_ARGUMENT和E_INVALIDARG具有相同的数值。使用引用源可以查看类如何初始化其HResult属性值。单击__HResults.COR_E_ARGUMENT以查看0x80070057,这是打包到hresult中的Windows的ERROR_INVALID_PARAMETER错误代码。您可以从WinError.h SDK头文件中获得E_INVALIDARG的错误代码,值相同。

这取决于客户端代码如何获得错误的文本描述,希望它使用IErrorInfo来获得Exception.Message属性。但如果它没有,那么它使用FormatMessage()的可能性就很大。这会产生Windows错误代码描述,"参数不正确"。