我正在开发一个由 Microsoft .NET 和 COM 组件使用的 Microsoft .NET 程序集。我正在编写托管代码,并且必须指出何时为类中的方法指定了错误的参数。当发生参数异常时,我需要将控制权返回给 COM 组件并提供正确的错误。
假设代码是:
throw new ArgumentException("Invalid Argument");
我猜代码会抛出一个新的 ArgumentException
对象,该对象可以由 Microsoft .NET 组件按原样使用,并由 CLR
转换为 HRESULT
用于 COM
组件。托管代码将错误或异常事件指示为异常,而除十六进制错误代码之外的 COM
组件称为 HRESULTs
。
我的问题是这个 ArgumentException
的十六进制值是多少?
如果是COR_E_ARGUMENT or E_INVALIDARG,
那么指定的错误消息并不重要?(这里是“无效参数”)
最佳答案
两者都是,COR_E_ARGUMENT 和 E_INVALIDARG 具有相同的数值。使用the Reference Source查看该类如何初始化其 HResult 属性值。单击 __HResults.COR_E_ARGUMENT 可查看 0x80070057,这是打包到 hresult 中的 Windows ERROR_INVALID_PARAMETER
错误代码。您可以从WinError.h SDK头文件中获取E_INVALIDARG
的错误代码,值相同。
这取决于客户端代码如何获取错误的文本描述,希望它使用 IErrorInfo 来获取 Exception.Message 属性。但如果没有,那么它有可能使用 FormatMessage()。这会产生 Windows 错误代码描述“参数不正确”。
关于c# - 将参数异常转换为 HRESULT?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28886241/