Freigeben über


Fehlerbehandlung und Rückgabewerte

VSPackages und COM verwenden dieselbe Architektur für Fehler. Die SetErrorInfo Funktionen sind GetErrorInfo Teil der Win32-Anwendungsprogrammierschnittstelle (APPLICATION Programming Interface, API). Jedes VSPackage in der integrierten Entwicklungsumgebung (Integrated Development Environment, IDE) kann diese globalen Win32-APIs aufrufen, um umfangreiche Fehlerinformationen aufzuzeichnen, wenn eine Fehlerbenachrichtigung empfangen wird. Das Visual Studio SDK stellt Interopassemblys zum Verwalten von Fehlerinformationen bereit.

Interop-Methoden

Die IDE bietet eine Methode, SetErrorInfodie anstelle des Aufrufs der Win32-APIs verwendet werden soll. Verwenden Sie SetErrorInfoin verwaltetem Code . Wenn ein Fehler HRESULT auf der Ebene eingeht, auf der die Fehlermeldung angezeigt werden soll (dies ist häufig das Objekt, das einen IOleCommandTarget Befehlshandler implementiert), verwendet die IDE eine andere Methode, ReportErrorInfoum das entsprechende Meldungsfeld anzuzeigen. Verwenden Sie in verwaltetem Code die ReportErrorInfo Methode.

Als VSPackage-Implementierung implementieren Ihre COM-Objekte normalerweise ISupportErrorInfo. Die ISupportErrorInfo Schnittstelle stellt sicher, dass umfangreiche Fehlerinformationen vertikal nach oben in der Anrufkette verschoben werden können. Objekte, die möglicherweise über Prozesse oder Threads hinweg verwendet werden, müssen unterstützt ISupportErrorInfo werden, um sicherzustellen, dass die umfangreichen Fehlerinformationen ordnungsgemäß an den Aufrufer zurückgemarstet werden.

Alle Objekte, die mit VSPackages zusammenhängen und an der Erweiterung der IDE beteiligt sind, einschließlich Editor-Fabriken, Editoren, Hierarchien und angebotenen Diensten, sollten umfangreiche Fehlerinformationen unterstützen. Die IDE erfordert zwar keine Implementierung ISupportErrorInfodieser VSPackage-Objekte, wird jedoch immer empfohlen.

Die IDE ist dafür verantwortlich, Fehlerinformationen zu melden und für einen Benutzer von Visual Studio anzuzeigen, wenn eine HRESULT an die IDE weitergegeben wird. Die IDE ist auch der Mechanismus zum Erstellen von ErrorInfo Objekten.

Allgemeine Richtlinien

Mit den SetErrorInfo Methoden ReportErrorInfo können Sie auch Fehler festlegen und melden, die für Ihre VSPackage-Implementierung intern sind. Befolgen Sie jedoch in der Regel die folgenden Richtlinien für die Behandlung von Fehlermeldungen in Ihrem VSPackage:

  • Implementieren Sie ISupportErrorInfo in Ihren VSPackage-COM-Objekten.

  • Erstellen Sie einen Fehlerberichtsmechanismus, der die SetErrorInfo Methode in Objekten aufruft, die implementiert werden IOleCommandTarget.

  • Lassen Sie die IDE Benutzern Fehler über die ReportErrorInfo Methode anzeigen.

Fehlerinformationen in der IDE

Die folgenden Regeln geben an, wie Fehlerinformationen in der Visual Studio-IDE behandelt werden:

  • Als Verteidigungsstrategie, um sicherzustellen, dass veraltete Fehlerinformationen nicht an Benutzer gemeldet werden, sollten Funktionen, die die ReportErrorInfo Methode aufrufen, zuerst die SetErrorInfo Methode aufrufen. null Übergeben Sie die Datei, um zwischengespeicherte Fehlermeldungen zu löschen, bevor Sie etwas aufrufen, das neue Fehlerinformationen festlegen kann.

  • Funktionen, die fehlermeldungen nicht direkt melden, dürfen die Methode nur aufrufen SetErrorInfo , wenn sie einen Fehler HRESULTzurückgeben. Es ist zulässig, den ErrorInfo Eintrag für eine Funktion oder beim Zurückgeben S_OKzu löschen. Die einzige Ausnahme dieser Regel ist, wenn ein Aufruf einen Fehler HRESULT zurückgibt, von dem die empfangende Partei explizit wiederherstellen oder sicher ignorieren kann.

  • Jeder Partei, der einen Fehler HRESULT explizit ignoriert, muss die SetErrorInfo Methode mit S_OKaufrufen. Andernfalls wird das ErrorInfo Objekt möglicherweise versehentlich verwendet, wenn eine andere Partei einen Fehler generiert, ohne einen eigenen ErrorInfoFehler bereitzustellen.

  • Alle Methoden, die einen Fehler HRESULT auslösen, werden empfohlen, die SetErrorInfo Methode aufzurufen, um umfassende Fehlerinformationen bereitzustellen. Wenn der zurückgegebene HRESULT Fehler ein spezieller FACILITY_ITF Fehler ist, ist die Methode erforderlich, um ein ordnungsgemäßes ErrorInfo Objekt bereitzustellen. Wenn der zurückgegebene Fehler ein Standardsystemfehler (z. B. , , E_INVALIDARGE_ABORT, E_UNEXPECTEDusw.) ist, ist es akzeptabel, E_OUTOFMEMORYden Fehlercode zurückzugeben, ohne die SetErrorInfo Methode explizit aufzurufen. Als defensive Codierungsstrategie rufen Sie beim Auftreten eines Fehlers HRESULT (einschließlich Systemfehlern) immer die SetErrorInfo Methode auf, entweder mit ErrorInfo einer ausführlicheren Beschreibung des Fehlers oder null.

  • Alle Funktionen, die einen Fehler zurückgeben, der von einem anderen Aufruf stammt, müssen die Informationen übergeben, die vom fehlerhaften Aufruf im HRESULT Objekt empfangen wurden, ohne das ErrorInfo Objekt zu ändern.

Siehe auch