Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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
ISupportErrorInfoin 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, denErrorInfoEintrag für eine Funktion oder beim Zurückgeben S_OKzu löschen. Die einzige Ausnahme dieser Regel ist, wenn ein Aufruf einen FehlerHRESULTzurückgibt, von dem die empfangende Partei explizit wiederherstellen oder sicher ignorieren kann.Jeder Partei, der einen Fehler
HRESULTexplizit ignoriert, muss die SetErrorInfo Methode mit S_OKaufrufen. Andernfalls wird dasErrorInfoObjekt möglicherweise versehentlich verwendet, wenn eine andere Partei einen Fehler generiert, ohne einen eigenenErrorInfoFehler bereitzustellen.Alle Methoden, die einen Fehler
HRESULTauslösen, werden empfohlen, die SetErrorInfo Methode aufzurufen, um umfassende Fehlerinformationen bereitzustellen. Wenn der zurückgegebeneHRESULTFehler ein speziellerFACILITY_ITFFehler ist, ist die Methode erforderlich, um ein ordnungsgemäßesErrorInfoObjekt 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 FehlersHRESULT(einschließlich Systemfehlern) immer die SetErrorInfo Methode auf, entweder mitErrorInfoeiner ausführlicheren Beschreibung des Fehlers odernull.Alle Funktionen, die einen Fehler zurückgeben, der von einem anderen Aufruf stammt, müssen die Informationen übergeben, die vom fehlerhaften Aufruf im
HRESULTObjekt empfangen wurden, ohne dasErrorInfoObjekt zu ändern.