共用方式為


錯誤處理和傳回值

VSPackages 與 COM 的錯誤使用相同的結構。 SetErrorInfoGetErrorInfo函式是 Win32 應用程式發展介面 (API) 的一部分。 在整合式的開發環境 (IDE) 中的任何 VSPackage 可以呼叫這些通用的 Win32 Api,以記錄大量的錯誤資訊時接收錯誤告知。 Visual Studio SDK提供 interop 組件,來管理資訊時發生錯誤。

Interop 的方法

為了方便,IDE 會提供一種方法, SetErrorInfo,而使用,而不是呼叫 Win32 Api。 在 managed 程式碼使用SetErrorInfo。 當錯誤HRESULT到達應該會顯示錯誤訊息的層級 (這通常是物件實作IOleCommandTarget命令處理常式),IDE 會使用另一種方法, ReportErrorInfo,以顯示適當的訊息方塊。 在 managed 程式碼使用ReportErrorInfo方法。

VSPackage 實作器中,為您的 COM 物件一般方式實作ISupportErrorInfoISupportErrorInfo介面,可確保大量的錯誤資訊可以垂直移動,呼叫鏈結。 可能會使用跨處理序,或在執行緒之間的物件都必須支援ISupportErrorInfo以確保大量的錯誤資訊正確地封傳回給呼叫端。

所有物件的 VSPackages 和相關的是參與人員擴充 IDE 中,包括編輯器工廠、 編輯器、 階層架構,並提供服務,都應該都支援大量的錯誤資訊。 雖然 IDE 不需要這些 VSPackage 物件來實作ISupportErrorInfo,它永遠會鼓勵。

IDE 會負責報告的錯誤資訊,並顯示給使用者的Visual Studio時HRESULT傳用至 IDE。 IDE 也是機制來建立ErrorInfo物件。

一般方針

您可以使用SetErrorInfoReportErrorInfo方法設定和報告,則您 VSPackage 實作的內部錯誤。 不過,根據一般規則,依據下列準則來處理您的 VSPackage 中的錯誤訊息:

在 IDE 中的錯誤資訊

下列規則指出如何處理錯誤的資訊,在Visual Studio IDE:

  • 防禦的策略,以保證過時的錯誤資訊不會報告給使用者,該呼叫的函式,如ReportErrorInfo方法應該先呼叫SetErrorInfo方法。 傳入null來清除快取的錯誤訊息,才呼叫任何項目,可能會設定新的資訊時發生錯誤。

  • 並不會直接報告的錯誤訊息的函式只允許以呼叫SetErrorInfo方法,如果他們便會傳回錯誤HRESULT。 可以清除 [允許ErrorInfo的函式,或傳回的項目S_OK。 這項規則的唯一例外是當呼叫傳回錯誤HRESULT ,接收合作對象可以明確地復原或從安全無虞地忽略。

  • 任何合作對象明確略過錯誤HRESULT必須呼叫SetErrorInfo方法以S_OK。 否則, ErrorInfo物件可能不小心使用當另一方會產生錯誤,而不需提供自己ErrorInfo

  • 所有的方法產生錯誤HRESULT建議呼叫SetErrorInfo方法,以提供豐富的錯誤資訊。 如果傳回HRESULT是一個特別FACILITY_ITF的錯誤,則此方法,才能提供適當的ErrorInfo物件。 如果傳回的錯誤是標準的系統錯誤 (比方說, E_OUTOFMEMORYE_ABORTE_INVALIDARGE_UNEXPECTED,和) 可以接受將傳回的錯誤碼,且不明確地呼叫SetErrorInfo方法。 作為防禦性編碼策略時產生錯誤, HRESULT (包括系統錯誤),請務必呼叫SetErrorInfo方法,與ErrorInfo描述更詳細地,失敗或null。

  • 傳回來自另一個呼叫發生錯誤失敗從收到的資訊都必須通過的所有函數都呼叫中HRESULT而不需要修改ErrorInfo物件。

請參閱

參考

IOleCommandTarget

其他資源

SetErrorInfo (Component Automation)

GetErrorInfo

ISupportErrorInfo Interface