c# - 将参数异常转换为 HRESULT?

标签 c# .net com

我正在开发一个由 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/

相关文章:

c# - 任何c#应用程序都可以在linux上运行吗

c# - 通过 Interop 在 Microsoft Publisher 中获取不同的样式部分

.net - 如果没有正确的.NET Framework版本,为什么不引发异常?

c# - 在 C# 中为所有事件和委托(delegate)创建一个包罗万象的处理程序

c++ - #import 指令创建的 COM 包装器类用 unsigned short 替换 wchar_t

.net - 将 C++ POS 控件与 .NET POS SDK 连接时出现问题

c# - 如何从 url 中删除 '.aspx' 扩展名

.net - 使用 MS Anti XSS 库清理 HTML

Windows Server 2012 中的 C# 动态 COM

c# - .NET:如何判断编码是否支持我的字符串中的所有字符?