2017-10-17 299 views

回答

1

COM不支持异常。它们是一个非常强大的语言运行时实现细节,C#异常不像C++异常。这使得HRESULT非常重要,它是替代品。每个COM方法应该返回一个错误代码,负值表示失败。

但许多语言确实支持异常。允许语言运行时将失败HRESULT变为异常。所以不再需要返回值。

它允许类型库导入程序和CLR重写方法签名。使它看起来像一个“正常”函数,具有有用的返回值。 [retval]属性表明这一点。没有一个它会成为一个返回void的普通方法。

还解释了[PreserveSig]属性的相关性,它抑制了这种重写。偶尔需要HRESULT返回不止0来表示成功。例如,COM迭代器需要它为Next() method