Sdílet prostřednictvím


Zpracování chyb a návratové hodnoty

Balíčky VSPackage a COM používají stejnou architekturu pro chyby. GetErrorInfo Funkce SetErrorInfo jsou součástí aplikačního programovacího rozhraní (API) Win32. Jakákoli sada VSPackage v integrovaném vývojovém prostředí (IDE) může volat tato globální rozhraní API Win32, která při zobrazení oznámení o chybě zaznamenávají bohaté informace o chybách. Sada Visual Studio SDK poskytuje sestavení vzájemné spolupráce pro správu informací o chybách.

Metody vzájemné spolupráce

Integrované vývojové prostředí (IDE) poskytuje metodu, SetErrorInfokterá se používá místo volání rozhraní API Win32. Ve spravovaném kódu použijte SetErrorInfo. Když dojde k chybě HRESULT na úrovni, kde by se měla zobrazit chybová zpráva (často se jedná o objekt implementující obslužnou IOleCommandTarget rutinu příkazu), integrované vývojové prostředí používá jinou metodu , ReportErrorInfok zobrazení příslušného pole zprávy. Ve spravovaném kódu použijte metodu ReportErrorInfo .

Jako implementátor VSPackage vaše objekty COM obvykle implementují ISupportErrorInfo. Rozhraní ISupportErrorInfo zajišťuje, aby bohaté informace o chybách mohly svisle osouvat řetěz volání. Objekty, které se můžou používat napříč procesy nebo napříč vlákny, musí podporovat ISupportErrorInfo , aby byly informace o bohatých chybách správně zařazovány zpět volajícímu.

Všechny objekty, které souvisejí s balíčky VSPackage a které jsou součástí rozšíření integrovaného vývojového prostředí (IDE), včetně editorů, editorů, hierarchií a nabízených služeb, by měly podporovat bohaté informace o chybách. I když integrované vývojové prostředí nevyžaduje tyto objekty VSPackage k implementaci ISupportErrorInfo, vždy se doporučuje.

Integrované vývojové prostředí (IDE) zodpovídá za hlášení informací o chybách a jejich zobrazení uživateli sady Visual Studio při každém HRESULT šíření do integrovaného vývojového prostředí (IDE). Integrované vývojové prostředí (IDE) je také mechanismus pro vytváření ErrorInfo objektů.

Obecné pokyny

Tyto metody ReportErrorInfo můžete použít SetErrorInfo k nastavení a hlášení chyb, které jsou interní pro implementaci balíčku VSPackage. Obecně ale platí, že při zpracování chybových zpráv ve VSPackage postupujte podle těchto pokynů:

  • Implementujte ISupportErrorInfo do objektů modelu COM VSPackage.

  • Vytvořte mechanismus zasílání zpráv o chybách, který volá metodu SetErrorInfo v objektech, které implementují IOleCommandTarget.

  • Nechte integrované vývojové prostředí (IDE) zobrazovat chyby uživatelům ReportErrorInfo prostřednictvím této metody.

Informace o chybách v integrovaném vývojovém prostředí (IDE)

Následující pravidla označují, jak zpracovávat informace o chybách v integrovaném vývojovém prostředí sady Visual Studio:

  • Jako obranná strategie, která zaručuje, že zastaralé informace o chybách nejsou hlášeny uživatelům, by funkce, které volají metodu ReportErrorInfo , by měly nejprve volat metodu SetErrorInfo . Před null voláním čehokoli, co by mohlo nastavit nové informace o chybách, předejte vymazání chybových zpráv uložených v mezipaměti.

  • Funkce, které přímo neohlašují chybové zprávy, mohou metodu SetErrorInfo volat pouze v případě, že vrací chybu HRESULT. Je přípustné vymazat ErrorInfo vstup do funkce nebo při vrácení S_OK. Jedinou výjimkou tohoto pravidla je, když volání vrátí chybu HRESULT , ze které může přijímající strana explicitně obnovit nebo bezpečně ignorovat.

  • Každá strana, která explicitně ignoruje chybu HRESULT , musí volat metodu SetErrorInfo s S_OK. V opačném případě může být objekt omylem použit, ErrorInfo když jiná strana vygeneruje chybu bez poskytnutí vlastní ErrorInfo.

  • Všechny metody, které pocházejí z chyby HRESULT , se doporučuje volat metodu SetErrorInfo , aby poskytovala podrobné informace o chybách. Pokud je vrácena HRESULT zvláštní FACILITY_ITF chyba, je nutné, aby metoda poskytla správný ErrorInfo objekt. Pokud vrácená chyba je standardní systémová chyba (například E_OUTOFMEMORY, E_ABORT, E_INVALIDARG, E_UNEXPECTEDatd.), je přijatelné vrátit kód chyby bez explicitního volání SetErrorInfo metody. Jako obranná strategie kódování při vzniku chyby (včetně systémových chyb HRESULT ) vždy volejte metodu SetErrorInfo , a to buď s ErrorInfo popisem selhání podrobněji, nebo null.

  • Všechny funkce, které vrací chybu pocházející z jiného volání, musí předávat informace přijaté z neúspěšného volání v HRESULT beze změny objektu ErrorInfo .

Viz také