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é vymazatErrorInfo
vstup do funkce nebo při vrácení S_OK. Jedinou výjimkou tohoto pravidla je, když volání vrátí chybuHRESULT
, 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ácenaHRESULT
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 chybHRESULT
) vždy volejte metodu SetErrorInfo , a to buď sErrorInfo
popisem selhání podrobněji, nebonull
.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 objektuErrorInfo
.