我正在开发一个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,
那么它与指定的错误消息无关?(这里是“无效的参数”)
答案 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错误代码描述,“参数不正确”。