Многие из функций COM имеют этот тип возврата, который представляет из себя 32 битное число. Именно эта величина и является одним из методов возвращения ошибки. Биты этой величины содержат информацию:
31 - наличие ошибки ( 0 нет 1 есть) 30-27 - резерв 26-16 - область ошибки 15 - 0 код ошибки
Вобщем для начала нам нужно проверить этот бит на наличие флага ошибки. Есть два макроса, которые позволяют нам проверить этот бит.
#define FAILED(Status) ((HRESULT)(Status)<0) #define SUCCEEDED(Status) ((HRESULT)(Status) >= 0)
Пример применения макроса FAILED:
if ( FAILED( hr )) { cout << "Failed to create server instance " << endl; return; }
Получив ошибку нам бы лучше всего ее расшифровать. Для этого есть специальная утилита в VC в меню TOOLS:
После ее запуска появится диалоговое окно, в которое можно ввести ошибку и посмотреть, что она обозначает.
Увидев русские буквы я немного опешил. VC вроде нормальный. А чего это пишет не так ? Подумав я решил может и не правильно, но более менее разумно. Основу этой функции составляет функция Win 32 API - FormatMessage(), которая может вернуть информацию об ошибке. Windows у меня русский. Поискав на диске эту фразу я ее нашел. Она в Kernel32.dll.