




Обычно он проверяет ошибки функции COM. Но проверка любой функции, возвращающей HRESULT, - это именно то, для чего она предназначена. FAILED возвращает истинное значение, если значение HRESULT отрицательное, что означает сбой функции (серьезность «ошибка» или «предупреждение»). И S_OK, и S_FALSE имеют значение> = 0 и поэтому не используются для сообщения об ошибке. Под «отрицательным» я подразумеваю, что для кодов ошибок HRESULT установлен старший бит, т.е., их шестнадцатеричное представление, которое можно найти в например, winerror.h, начинается с 8, как в 0x8000FFFF.
Эта страница показывает половину включаемого файла WinError.h, который определяет FAILED(). На самом деле это просто очень простой макрос, все определение выглядит так:
#define FAILED(Status) ((HRESULT)(Status)<0)
And if possible does anyone know a c# equivalent?
На самом деле вам это не понадобится в C#, если вы не используете COM-объекты. Большинство функций .NET либо уже возвращают (более или менее) значимое значение (например, null, false), либо выдают исключение в случае сбоя.
Если вы напрямую обращаетесь к COM-объекту, вы можете определить простую Failed-функцию, которая делает то же, что и макрос в посте размотки. Определите это локально (защищенный / частный), поскольку беспорядочные детали COM в любом случае не должны быть видны в вашем приложении.
Если вы не знали, в COM также есть макрос SUCCEEDED. Не нужно проверять на отказ :)
Функция COM, возвращающая void !? Где? Который из?
Прав ли я, думая, что управляемая библиотека DirectX на самом деле является оболочкой com? или я совершенно ошибаюсь? (поскольку почти каждый метод возвращает void !!)
MDX, если я правильно помню, больше использовать не следует. Вместо этого вы можете попробовать XNA. В любом случае функция, возвращающая void, скорее всего, сигнализирует об ошибке, вместо этого генерируя исключение.
MDX - это тонкая оболочка COM. Таким образом, он скрывает фактические детали COM, оставаясь при этом примерно эквивалентным ему, что может быть причиной того, что методы возвращают void.
В этом есть смысл! Что касается комментария XNA ... я чувствую себя достаточно грязным, используя управляемый directx, поэтому я не хотел бы делать решительный шаг и использовать `` игрушку '', такую как XNA;)
XNA на самом деле не игрушка. В дикой природе есть впечатляющие демоверсии (например, на YouTube), и они даже работают на XBox 360. И поверьте мне, это намного интереснее, чем MDX.
Большой! но что, если вызываемый мной метод com возвращает значение void ?? Что я могу протестировать в этой ситуации?