Может кто-нибудь объяснить функцию c ++ FAILED? - PullRequest
3 голосов
/ 18 декабря 2008

Я видел много примеров кода на c ++, который оборачивает вызовы функций в FAILED () функцию / метод / макрос. Может ли кто-нибудь объяснить мне, как это работает? И если возможно кто-нибудь знает эквивалент C #?

Ответы [ 3 ]

7 голосов
/ 18 декабря 2008

Обычно проверяет ошибки функции COM. Но проверка любой функции, которая возвращает HRESULT, предназначена именно для этого. FAILED возвращает истинное значение, если значение HRESULT отрицательно, что означает сбой функции (серьезность «ошибка» или «предупреждение»). И S_OK, и S_FALSE имеют> = 0, поэтому они не используются для передачи ошибки. Под «отрицательным» я подразумеваю, что старший бит установлен для HRESULT кодов ошибок, т.е. , их шестнадцатеричное представление, которое можно найти в например, , winerror.h с 8, как в 0x8000FFFF.

2 голосов
/ 18 декабря 2008

Эта страница показывает половину включаемого файла WinError.h, который определяет FAILED(). На самом деле это просто очень простой макрос, полное определение выглядит так:

#define FAILED(Status) ((HRESULT)(Status)<0)
0 голосов
/ 18 декабря 2008

А если возможно, кто-нибудь знает эквивалент C #?

На самом деле вам это не понадобится в C #, если вы не используете COM-объекты. Большинство .NET-функций либо уже возвращают (более или менее) значащее значение (т. Е. Null, false), либо выдают исключение при сбое.

Если вы непосредственно обращаетесь к COM-объекту, вы можете определить простую функцию Failed, которая делает то, что делает макрос в публикации unwind. Определите это локально (защищено / приватно), так как грязные детали COM не должны быть видны в вашем приложении.

Если вы не знали, в COM есть также макрос SUCCEEDED. Не нужно проверять на неудачу:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...