我有一个关于异常并将控制权返回给COM调用者的问题。下面是一个带有自定义异常类的测试问题。有什么区别
Marshal.ThrowExceptionForHR(CustomException.COR_E_ARGUMENT);
和
throw new CustomException("Argument is out of bounds");
我有点理解为什么1)和2不起作用,因为它们返回一个int和一个Exception-object。但是3和4之间的区别是什么?
public class CustomException : ApplicationException
{
public static int COR_E_ARGUMENT = unchecked((int)0x80070057);
public CustomException(string msg)
: base(msg)
{
HResult = COR_E_ARGUMENT;
}
}
您需要编写将使用CustomException类的代码段 立即将控制权返回给COM调用者。你还需要确保 调用者可以访问错误代码。哪个代码段应该 你用吗?
答案 0 :(得分:3)
COM客户端代码当然完全不了解.NET Exception类型,它只能看到HRESULT错误代码。因此,添加自己的异常类型没有任何附加值。
所有标准的.NET Exception派生类都已经预先填充了预先映射的HRESULT值。他们在构造函数中分配Exception.HResult属性。如果要生成E_INVALIDARG(0x80070057),请使用已使用该错误代码的标准.NET异常类。 System.ArgumentException。