System.Runtime.InteropServices.COMException, klasa

Ten artykuł zawiera dodatkowe uwagi dotyczące dokumentacji referencyjnej dla tego interfejsu API.

Klasa COMException jest wyjątkiem zgłaszanym, gdy nierozpoznany HRESULT jest zwracany z wywołania metody COM.

Środowisko uruchomieniowe języka wspólnego przekształca dobrze znane elementy HRESULTs na wyjątki platformy .NET, umożliwiając obiektom COM zwracanie znaczących informacji o błędach zarządzanym klientom. Mapowanie HRESULT-to-exception działa również w innym kierunku, zwracając określone stosy HRESULTs do niezarządzanych klientów. Aby uzyskać szczegółowe informacje na temat mapowania, zobacz Jak mapować elementy HRESULTs i wyjątki.

Gdy środowisko uruchomieniowe napotka nieznane HRESULT (HRESULT, który nie zawiera określonego, odpowiadającego mu wyjątku), zgłasza wystąpienie COMException klasy. Ten wyjątek typu all-purpose uwidacznia te same elementy członkowskie co każdy wyjątek i dziedziczy właściwość publiczną ErrorCode zawierającą właściwość HRESULT zwracaną przez obiekt wywoływany. Jeśli komunikat o błędzie jest dostępny dla środowiska uruchomieniowego (uzyskanego z interfejsu IErrorInfo lub Err obiektu w Visual Basic, lub w niektórych przypadkach z systemu operacyjnego), komunikat zostanie zwrócony do obiektu wywołującego. Jeśli jednak deweloper składnika COM nie może dołączyć komunikatu o błędzie, środowisko uruchomieniowe zwraca ośmiocyfrowy element HRESULT zamiast ciągu komunikatu. Posiadanie hrESULT umożliwia obiektowi wywołującym określenie przyczyny wyjątku ogólnego.

Obsługa wyjątku COMException

Poniżej przedstawiono niektóre zagadnienia dotyczące rozwiązywania problemów z COMException wyjątkiem.

ErrorCode Sprawdź właściwość Gdy środowisko uruchomieniowe napotka nieznane hrESULT i zgłasza COMException wyjątek, ErrorCode właściwość zawiera komunikat o błędzie lub, jeśli komunikat o błędzie jest niedostępny, ośmiocyfrowa wartość HRESULT. Komunikat o błędzie lub wartość HRESULT może pomóc w ustaleniu przyczyny wyjątku.

Aby uzyskać listę wartości HRESULT, zobacz Typowe wartości HRESULT.

Podczas przekazywania argumentów z opóźnieniem do metod obiektów pakietu Microsoft Office może zostać zgłoszony wyjątek, COMException gdy obiekty są obiektami COM. Późne powiązanie zakłada, że takie wywołania metody obejmują ByRef parametr i że przekazana właściwość ma metodę set dostępu. Jeśli właściwość nie jest, platforma .NET generuje MissingMethodException wyjątek (z CORE_E_MISSINGMETHOD HRESULT ). Aby obejść to zachowanie, użyj wczesnych obiektów powiązanych lub przekaż zmienną zamiast właściwości obiektu.

Com służy do komunikowania się między programem Visual Studio a procesem hostingu. Ponieważ jest on używany przed uruchomieniem kodu, wywołanie metody CoInitializeSecurity powoduje zgłoszenie tego wyjątku. W niektórych przypadkach uruchomienie programu Visual Studio jako Administracja istrator może rozwiązać ten problem. Można również wyłączyć proces hostingu.

Zgłaszanie wyjątku COMException

Chociaż można użyć COMException klasy , aby zwrócić określone elementy HRESULTs do niezarządzanych klientów, zgłaszanie określonego wyjątku platformy .NET jest lepsze niż użycie wyjątku ogólnego. Należy wziąć pod uwagę, że klienci zarządzani, a także klienci niezarządzani mogą używać obiektu .NET, a zgłaszanie hrESULT do zarządzanego obiektu wywołującego jest mniej zrozumiałe niż zgłaszanie wyjątku.