處理 COM Interop 例外狀況
更新:2007 年 11 月
Managed 和 Unmanaged 程式碼可以同時使用來處理例外狀況。如果方法在 Managed 程式碼中擲回例外狀況,Common Language Runtime 可以傳遞 HRESULT 至 COM 物件。如果方法在 Unmanaged 程式碼中因傳回失敗 HRESULT 而失敗,執行階段將擲回可為 Managed 程式碼所攔截的例外狀況。
執行階段自動將 HRESULT 從 COM Interop 對應至更多特定例外狀況。例如,E_ACCESSDENIED 會變成 UnauthorizedAccessException、E_OUTOFMEMORY 會變成 OutOfMemoryException,以此類推。
如果 HRESULT 是自訂結果,或是當它對執行階段而言是未知的,則執行階段會將泛用 COMException 傳遞至用戶端。COMException 的 ErrorCode 屬性會包含 HRESULT 值。
如需 COM interop 的完整討論,請參閱進階 COM 互通性。
使用 IErrorInfo
當錯誤從 COM 傳遞至 Managed 程式碼時,執行階段會以錯誤資訊填入 (Populate) 例外狀況物件。支援 IErrorInfo 和傳回 HRESULTS 的 COM 物件將提供這個資訊給 Managed 程式碼例外狀況。例如,執行階段會將 COM 錯誤的 Description 對應至例外狀況的 Message 屬性。如果 HRESULT 沒有提供額外錯誤資訊,執行階段會以預設值填滿例外狀況的許多屬性。
如果方法在 Unmanaged 程式碼中失敗,例外狀況可以傳遞到 Managed 程式碼片段。HRESULTS 和例外狀況主題中包含示範 HRESULTS 如何對應至執行階段例外狀況物件的表格。