System.Runtime.InteropServices.COMException-Klasse
Dieser Artikel enthält ergänzende Hinweise zur Referenzdokumentation für diese API.
Die COMException Klasse ist die Ausnahme, die ausgelöst wird, wenn ein nicht erkanntes HRESULT von einem COM-Methodenaufruf zurückgegeben wird.
Die Common Language Runtime transformiert bekannte HRESULTs in .NET-Ausnahmen, sodass COM-Objekte aussagekräftige Fehlerinformationen an verwaltete Clients zurückgeben können. Die HRESULT-zu-Ausnahme-Zuordnung funktioniert auch in der anderen Richtung, indem bestimmte HRESULTs an nicht verwaltete Clients zurückgegeben werden. Details zur Zuordnung finden Sie unter How to map HRESULTs and exceptions.For mapping details, see How to map HRESULTs and exceptions.
Wenn die Laufzeit auf ein nicht vertrautes HRESULT (ein HRESULT ohne eine bestimmte, entsprechende Ausnahme) trifft, löst sie eine Instanz der COMException Klasse aus. Diese allzweckbezogene Ausnahme macht dieselben Member wie jede Ausnahme verfügbar und erbt eine öffentliche ErrorCode Eigenschaft, die das vom Angerufenen zurückgegebene HRESULT enthält. Wenn eine Fehlermeldung für die Laufzeit verfügbar ist (abgerufen über die IErrorInfo-Schnittstelle oder das Err
Objekt in Visual Basic oder in einigen Fällen vom Betriebssystem), wird die Nachricht an den Aufrufer zurückgegeben. Wenn der Entwickler der COM-Komponente jedoch keine Fehlermeldung geschrieben hat, gibt die Laufzeit statt einer Meldungszeichenfolge das achtstellige HRESULT zurück. Wenn Sie ein HRESULT haben, kann der Aufrufer die Ursache der generischen Ausnahme ermitteln.
Behandeln einer COMException-Ausnahme
Im Folgenden finden Sie einige Überlegungen zur Problembehandlung bei einer COMException Ausnahme.
Überprüfen Sie die ErrorCode Eigenschaft, wenn die Laufzeit auf ein unbekanntes HRESULT stößt und eine COMException Ausnahme auslöst, enthält die ErrorCode Eigenschaft entweder die Fehlermeldung oder, wenn eine Fehlermeldung nicht verfügbar ist, den achtstelligen HRESULT-Wert. Die Fehlermeldung oder der HRESULT-Wert können Ihnen helfen, die Ursache der Ausnahme zu ermitteln.
Eine Liste der HRESULT-Werte finden Sie unter "Allgemeine HRESULT-Werte".
Beim Übergeben von spät gebundenen Argumenten an Methoden von Microsoft Office-Objekten kann eine COMException Ausnahme ausgelöst werden, wenn es sich bei den Objekten um COM-Objekte handelt. Das spät bindende Objekt geht davon aus, dass solche Methodenaufrufe einen ByRef
-Parameter einschließen und dass die übergebene Eigenschaft über einen set
-Accessor verfügt. Wenn die Eigenschaft nicht funktioniert, generiert .NET eine MissingMethodException Ausnahme (mit einem CORE_E_MISSINGMETHOD
HRESULT). Um dieses Verhalten zu vermeiden, müssen Sie früh gebundene Objekte verwenden oder eine Variable statt einer Objekteigenschaft übergeben.
COM wird verwendet, um zwischen Visual Studio und dem Hostingprozess zu kommunizieren. Da sie vor der Codeausführung verwendet wird, bewirkt ein Aufruf von CoInitializeSecurity , dass diese Ausnahme ausgelöst wird. In einigen Fällen kann die Ausführung von Visual Studio als Administrator das Problem beheben. Sie können den Hostingprozess auch deaktivieren.
Auslösen einer COMException-Ausnahme
Obwohl Sie die COMException Klasse verwenden können, um bestimmte HRESULTs an nicht verwaltete Clients zurückzugeben, ist das Auslösen einer bestimmten .NET-Ausnahme besser als die Verwendung einer generischen Ausnahme. Denken Sie daran, dass verwaltete Clients sowie nicht verwaltete Clients Ihr .NET-Objekt verwenden können und das Auslösen eines HRESULT-Objekts an einen verwalteten Aufrufer weniger verständlich ist als das Auslösen einer Ausnahme.