2017-10-17 332 views

回答

1

COM不支持異常。它們是一個非常強大的語言運行時實現細節,C#異常不像C++異常。這使得HRESULT非常重要,它是替代品。每個COM方法應該返回一個錯誤代碼,負值表示失敗。

但許多語言確實支持異常。允許語言運行時將失敗HRESULT變爲異常。所以不再需要返回值。

它允許類型庫導入程序和CLR重寫方法簽名。使它看起來像一個「正常」函數,具有有用的返回值。 [retval]屬性表明這一點。沒有一個它會成爲一個返回void的普通方法。

還解釋了[PreserveSig]屬性的相關性,它抑制了這種重寫。偶爾需要HRESULT返回不止0來表示成功。例如,COM迭代器需要它爲Next() method