将参数异常转换为HRESULT?

时间:2015-03-05 19:37:17

标签: c# .net com

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

说代码是:

throw new ArgumentException("Invalid Argument");

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

我的问题是这个ArgumentException的十六进制值是多少? 如果它是COR_E_ARGUMENT or E_INVALIDARG, 那么它与指定的错误消息无关?(这里是“无效的参数”)

1 个答案:

答案 0 :(得分:3)

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

这取决于客户端代码如何获取错误的文本描述,希望它使用IErrorInfo来获取Exception.Message属性。但如果没有,那么它有一些使用FormatMessage()的几率。这会产生Windows错误代码描述,“参数不正确”。