我有一个关于异常和将控制权返回给 COM 调用者的问题。下面是一个带有自定义异常类的测试问题。和有什么区别
Marshal.ThrowExceptionForHR(CustomException.COR_E_ARGUMENT);
和
throw new CustomException("Argument is out of bounds");
我有点明白为什么 1) 和 2 不起作用,因为它们返回一个 int 和一个异常对象。但是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 调用者。您还需要确保调用者有权访问错误代码。您应该使用哪个代码段?
- 返回 Marshal.GetExceptionForHR(CustomException.COR_E_ARGUMENT);
- 返回 CustomException.COR_E_ARGUMENT;
- Marshal.ThrowExceptionForHR(CustomException.COR_E_ARGUMENT);
- throw new CustomException("参数越界"); // 正确答案