Поделиться через


Коды ошибок в COM

Чтобы указать успешность или сбой, методы и функции COM возвращают значение типа HRESULT. HRESULT — 32-разрядное целое число. Старший бит HRESULT сигнализирует об успешном выполнении или сбое. Ноль (0) указывает на успешность и 1 указывает на сбой.

Это создает следующие числовые диапазоны:

  • Коды успешного выполнения: 0x0–0x7FFFFFFF.
  • Коды ошибок: 0x80000000–0xFFFFFFFF.

Небольшое количество методов COM не возвращает значение HRESULT. Например, методы AddRef и Release возвращают беззнаковые длинные значения. Но каждый метод COM, возвращающий код ошибки, делает это путем возврата значения HRESULT.

Чтобы проверить, успешно ли выполнен метод COM, следует проверить старший бит возвращаемого HRESULT. Заголовки пакета SDK для Windows предоставляют два макроса, которые упрощают работу: макрос SUCCEEDED и макрос FAILED. Макрос SUCCEEDED возвращает TRUE, если HRESULT является кодом успешного выполнения, и FALSE, если это код ошибки. В следующем примере проверяется успешность CoInitializeEx.

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

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

Иногда удобнее проверить обратное условие. Макрос НЕУДАЧНО выполняет противоположную функцию успешно. Он возвращает TRUE для кода ошибки и FALSE для кода успешности.

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

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

Далее в этом модуле мы рассмотрим некоторые практические рекомендации по структуре кода для обработки ошибок COM. (См. обработку ошибок в разделе COM.)

Далее

Создание объекта в COM