Udostępnij przez


Kody błędów w COM

Aby wskazać powodzenie lub niepowodzenie, metody i funkcje COM zwracają wartość typu HRESULT. HRESULT jest 32-bitową liczbą całkowitą. Bit o wysokiej kolejności HRESULT sygnalizuje powodzenie lub niepowodzenie. Zero (0) wskazuje powodzenie, a 1 oznacza niepowodzenie.

Spowoduje to utworzenie następujących zakresów liczbowych:

  • Kody powodzenia: 0x0–0x7FFFFFFF.
  • Kody błędów: 0x80000000–0xFFFFFFFF.

Niewielka liczba metod COM nie zwraca wartości HRESULT. Na przykład metody AddRef i Release zwracają niepodpisane długie wartości. Jednak każda metoda COM, która zwraca kod błędu, zwraca wartość HRESULT.

Aby sprawdzić, czy metoda COM powiedzie się, sprawdź bit o wysokiej kolejności zwróconej HRESULT. Nagłówki zestawu Windows SDK zawierają dwa makra, które to ułatwiają: makro SUCCEEDED oraz makro FAILED. Makro SUCCEEDED zwraca TRUE, jeśli HRESULT jest kodem powodzenia, i FALSE, jeśli jest kodem błędu. Poniższy przykład sprawdza, czy CoInitializeEx się powiedzie.

HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | 
    COINIT_DISABLE_OLE1DDE);

if (SUCCEEDED(hr))
{
    // The function succeeded.
}
else
{
    // Handle the error.
}

Czasami bardziej wygodne jest przetestowanie warunku odwrotnego. Makro NIEUDANE wykonuje przeciwieństwo UDANE. Zwraca TRUE dla kodu błędu i FALSE dla kodu powodzenia.

HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | 
    COINIT_DISABLE_OLE1DDE);

if (FAILED(hr))
{
    // Handle the error.
}
else
{
    // The function succeeded.
}

W dalszej części tego modułu przyjrzymy się praktycznym poradom dotyczącym sposobu tworzenia struktury kodu w celu obsługi błędów COM. (Zobacz obsługę błędów wCOM).

Dalej

Tworzenie obiektu w COM