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