Share via


處理 COM Interop 例外狀況

Managed 和 Unmanaged 程式碼可以同時使用來處理例外狀況。 如果方法在 Managed 程式碼中擲回例外狀況,Common Language Runtime 可以傳遞 HRESULT 至 COM 物件。 如果方法在 Unmanaged 程式碼中因傳回失敗 HRESULT 而失敗,執行階段將擲回可為 Managed 程式碼所攔截的例外狀況。

執行階段自動將 HRESULT 從 COM Interop 對應至更多特定例外狀況。 例如,E_ACCESSDENIED 會變成 UnauthorizedAccessException、E_OUTOFMEMORY 會變成 OutOfMemoryException,以此類推。

如果 HRESULT 是自訂結果,或是當它對執行階段而言是未知的,則執行階段會將泛用 COMException 傳遞至用戶端。 COMExceptionErrorCode 屬性會包含 HRESULT 值。

如需 COM interop 的完整討論,請參閱進階 COM 互通性

使用 IErrorInfo

當錯誤從 COM 傳遞至 Managed 程式碼時,執行階段會以錯誤資訊填入 (Populate) 例外狀況物件。 支援 IErrorInfo 和傳回 HRESULTS 的 COM 物件將提供這個資訊給 Managed 程式碼例外狀況。 例如,執行階段會將 COM 錯誤的 Description 對應至例外狀況的 Message 屬性。 如果 HRESULT 沒有提供額外錯誤資訊,執行階段會以預設值填滿例外狀況的許多屬性。

如果方法在 Unmanaged 程式碼中失敗,例外狀況可以傳遞到 Managed 程式碼片段。 HRESULTS 和例外狀況主題中包含示範 HRESULTS 如何對應至執行階段例外狀況物件的表格。

請參閱

概念

處理和擲回例外狀況

其他資源

進階 COM 互通性