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


Коды ошибок в 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.
}

Иногда удобнее проверить обратное условие. Макрос FAILED выполняет противоположность SUCCEEDED. Он возвращает значение TRUE для кода ошибки и FALSE для кода успешного выполнения.

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

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

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

Следующая

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