将参数异常转换为 HRESULT?

Convert argument exception to HRESULT?

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

假设密码是:

throw new ArgumentException("Invalid Argument");

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

我的问题是 ArgumentException 的十六进制值是多少? 如果是COR_E_ARGUMENT或者E_INVALIDARG, 那么跟指定的错误信息没有关系吗?(这里是"Invalid Argument")

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

这取决于客户端代码如何获取错误的文本描述,希望它使用 IErrorInfo 来获取 Exception.Message 属性。但如果它没有,那么它使用 FormatMessage() 的可能性很小。这会产生 Windows 错误代码描述,"The parameter is incorrect"。