Здравствуйте, Burz, Вы писали:
B>есть переменная типа HRESULT у которой значение = S_FAILED B>и идет проверка: if( SUCCEEDED(hr) ) B>Так выполнение продолжается внутри этого ифа. Это глюк?
Что это за константа S_FAILED ?
Есть S_FALSE, что означает "успешно, но результат отрицательный" (сравни с S_OK).
Есть E_FAIL, что означает "ошибка, что-то не получилось".
И ещё дофига разных успешных и ошибочных значений. Ошибочных, как правило, больше.
Конвенция наименования кодов говорит, что S_xxx и yyy_S_xxx — это коды успеха, а E_xxx и yyy_E_xxx — коды ошибок.
Макросы SUCCEEDED() / FAILED() проверяют, является ли результат "успешным" или "провальным".
Этому соответствует 0 или 1 (соответственно) в 31-м бите — флаг SEVERITY.