共用方式為


System.Runtime.InteropServices.COMException 類別

本文提供此 API 參考文件的補充備註。

當從 COM 方法呼叫返回無法辨識的 HRESULT 時,COMException 類別會擲出例外狀況。

Common Language Runtime 會將已知的 HRESULT 轉換為 .NET 例外狀況,讓 COM 物件可將有意義的錯誤資訊傳回給 Managed 用戶端。 HRESULT 到例外狀況的對應在相反方向也有效,方法是將特定的 HRESULT 回傳給非受控用戶端。 如需對應詳細數據,請參閱 如何對應 HRESULT 和例外狀況

當運行時間遇到不熟悉的 HRESULT 時(缺少特定且對應的例外狀況的 HRESULT),它會擲回 類別的 COMException 實例。 這個全用途例外狀況會公開與任何例外狀況相同的成員,並繼承包含被呼叫者傳回之 HRESULT 的公用 ErrorCode 屬性。 如果執行階段可以使用錯誤訊息(從 Visual Basic 中的 IErrorInfo 介面或 Err 物件取得,或在某些情況下從作業系統取得),訊息會返回給呼叫端。 不過,如果 COM 元件開發人員無法包含錯誤訊息,運行時間會傳回八位數的 HRESULT 來取代訊息字串。 具有 HRESULT 可讓呼叫端判斷泛型例外狀況的原因。

處理 COMException 例外狀況

以下是一些針對COMException例外狀況進行疑難解答時的考慮要點。

檢查 ErrorCode 屬性。當執行時遇到不熟悉的 HRESULT 並引發 COMException 例外狀況時,ErrorCode 屬性會包含錯誤訊息,若錯誤訊息不可用,則包含八位數的 HRESULT 值。 錯誤訊息或 HRESULT 值可協助您判斷例外狀況的原因。

如需 HRESULT 值的清單,請參閱 一般 HRESULT 值

將後期綁定的參數傳遞至 Microsoft Office 物件的方法時,當對象是 COM 物件時,可能會引發異常。 晚期系結器假設這類方法呼叫牽涉到 ByRef 參數,而您傳遞的屬性具有 set 存取子。 如果屬性沒有,.NET 會產生 MissingMethodException 例外狀況(使用 CORE_E_MISSINGMETHOD HRESULT )。 若要解決此問題,請使用早期綁定對象或傳遞變數,而不是對象的屬性。

COM 可用來在Visual Studio與 裝載進程之間進行通訊。 因為在程式代碼執行之前會使用它,所以 對 CoInitializeSecurity 的呼叫會導致擲回這個例外狀況。 在某些情況下,以系統管理員身分執行 Visual Studio 可能會解決此問題。 您也可以 停用主機程序

擲回 COMException 例外狀況

雖然您可以使用 類別 COMException 將特定 HRESULT 傳回給 Unmanaged 用戶端,但擲回特定 .NET 例外狀況比使用泛型例外狀況更好。 請考慮受控式用戶端和非受控用戶端都可以使用您的 .NET 物件,相較於拋出一個例外狀況給受控式呼叫者,拋出 HRESULT 會讓他們更難理解。