Udostępnij przez


Strategie obsługi błędów

Ponieważ metody interfejsu są wirtualne, obiekt wywołujący nie może znać pełnego zestawu wartości, które mogą być zwracane z jednego wywołania. Jedna implementacja metody może zwrócić pięć wartości; inny może zwrócić osiem.

W dokumentacji wymieniono typowe wartości, które mogą być zwracane dla każdej metody; są to wartości, które należy sprawdzić i obsługiwać w kodzie, ponieważ mają specjalne znaczenie. Inne wartości mogą być zwracane, ale ponieważ nie są znaczące, nie trzeba pisać specjalnego kodu, aby je obsłużyć. Proste sprawdzenie zerowej lub niezerowej jest odpowiednie.

Wartości HRESULT

Zwracana wartość funkcji i metod COM to HRESULT. Wartości niektórych HRESULTs zostały zmienione w modelu COM, aby wyeliminować wszystkie duplikaty i nakładać się na kody błędów systemu. Te, które duplikowały kody błędów systemowych, zostały zmienione na FACILITY_WIN32, a te, które nakładają się na siebie, pozostają w FACILITY_NULL. Typowe wartości HRESULT i ich wartości są wymienione w poniższej tabeli.

HRESULT Wartość Opis
E_ABORT
0x80004004
Operacja została przerwana z powodu nieokreślonego błędu.
E_ACCESSDENIED
0x80070005
Ogólny błąd odmowy dostępu.
E_FAIL
0x80004005
Wystąpił nieokreślony błąd.
E_HANDLE
0x80070006
Użyto nieprawidłowego uchwytu.
E_INVALIDARG
0x80070057
Co najmniej jeden argument jest nieprawidłowy.
E_NOINTERFACE
0x80004002
Metoda QueryInterface nie rozpoznała żądanego interfejsu. Interfejs nie jest obsługiwany.
E_NOTIMPL
0x80004001
Metoda nie jest zaimplementowana.
E_OUTOFMEMORY
0x8007000E
Metoda nie może przydzielić wymaganej pamięci.
E_PENDING
0x8000000A
Dane niezbędne do ukończenia operacji nie są jeszcze dostępne.
E_POINTER
0x80004003
Użyto nieprawidłowego wskaźnika.
E_UNEXPECTED
0x8000FFFF
Wystąpił katastrofalny błąd.
S_FALSE
0x00000001
Metoda powiodła się i zwróciła wartość logiczną FALSE.
S_OK
0x00000000
Metoda powiodła się. Jeśli oczekiwana jest wartość zwracana przez wartość logiczną, zwracana wartość jest true.

Błędy sieci

Jeśli pierwsze cztery cyfry kodu błędu to 8007, oznacza to błąd systemu lub sieci. Aby zdekodować te typy błędów, można użyć polecenia net net. Aby zdekodować błąd, najpierw przekonwertuj ostatnie cztery cyfry kodu błędu szesnastkowego na liczbę dziesiętną. Następnie w wierszu polecenia wpisz następujące polecenie, gdzie kod dziesiętny jest zastępowany wartością zwracaną, którą chcesz zdekodować:

net helpmsg <decimal_code>

Polecenie net zwraca opis błędu. Jeśli na przykład com zwraca błąd 8007054B, przekonwertuj wartość 054B na liczbę dziesiętną (1355). Następnie wpisz następujące polecenie:

net helpmsg 1355

Polecenie net zwraca opis błędu: "Określona domena nie istnieje".

obsługa błędów w COM