Коды ошибок в 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.)
Следующая