System.Runtime.InteropServices.COMException-klass

Anmärkning

Den här artikeln innehåller ytterligare kommentarer till referensdokumentationen för det här API:et.

Klassen COMException är det undantag som utlöses när en okänd HRESULT returneras från ett COM-metodanrop.

Den vanliga språkkörningen omvandlar välkända HRESULT till .NET-undantag, vilket gör att COM-objekt kan returnera meningsfull felinformation till hanterade klienter. HRESULT-till-undantag-mappningen fungerar också i den andra riktningen genom att returnera specifika HRESULT till ohanterade klienter. För detaljer om mappning, se Hur man mappar HRESULT och undantag.

När körtiden stöter på en obekant HRESULT (en HRESULT som saknar ett specifikt, motsvarande undantag) genererar den en instans av klassen COMException. Det här undantaget för alla syften exponerar samma medlemmar som alla undantag och ärver en offentlig ErrorCode egenskap som innehåller HRESULT som returneras av anropare. Om ett felmeddelande är tillgängligt för körningen (hämtat från IErrorInfo-gränssnittet eller Err objektet i Visual Basic, eller i vissa fall från operativsystemet), returneras meddelandet till anroparen. Men om COM-komponentutvecklaren inte kan ta med ett felmeddelande returnerar körningen den åttasiffriga HRESULT:en i stället för en meddelandesträng. Med en HRESULT kan anroparen fastställa orsaken till det allmänna undantaget.

Hantera ett COMException-undantag

Följande är några saker att tänka på när du felsöker ett COMException undantag.

ErrorCode Kontrollera egenskapen När körmiljön stöter på en okänd HRESULT och utlöser ett COMException undantag, innehåller ErrorCode-egenskapen antingen felmeddelandet eller, om ett felmeddelande inte är tillgängligt, det åttasiffriga HRESULT-värdet. Felmeddelandet eller HRESULT-värdet kan hjälpa dig att fastställa orsaken till undantaget.

En lista över HRESULT-värden finns i Vanliga HRESULT-värden.

När du skickar sent bundna argument till metoder för Microsoft Office-objekt kan ett COMException undantag uppstå när objekten är COM-objekt. Den sena bindningen förutsätter att sådana metodanrop omfattar en ByRef parameter och att den egenskap som du skickar har en set accessor. Om egenskapen inte gör det genererar .NET ett MissingMethodException undantag (med en CORE_E_MISSINGMETHOD HRESULT ). Du kan kringgå det här beteendet genom att använda tidiga bundna objekt eller skicka en variabel i stället för en egenskap för objektet.

COM används för kommunikation mellan Visual Studio och värdprocessen. Eftersom det används innan kod körs, leder ett anrop till CoInitializeSecurity till att det här undantaget genereras. I vissa fall kan du lösa problemet genom att köra Visual Studio som administratör. Du kan också inaktivera värdprocessen.

Utlösa ett COMException-undantag

Även om du kan använda COMException klassen för att returnera specifika HRESULT till ohanterade klienter är det bättre att utlösa ett specifikt .NET-undantag än att använda ett allmänt undantag. Tänk på att både hanterade klienter och ohanterade klienter kan använda ditt .NET-objekt, och att skicka en HRESULT till en hanterad anropare är mindre begripligt än att utlösa ett undantag.