Может кто-нибудь объяснить функцию С ++ FAILED?

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
0
6 531
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Обычно он проверяет ошибки функции 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 ?? Что я могу протестировать в этой ситуации?

Adam Naylor 18.12.2008 13:25

Функция COM, возвращающая void !? Где? Который из?

Johann Gerell 18.12.2008 13:30

Прав ли я, думая, что управляемая библиотека DirectX на самом деле является оболочкой com? или я совершенно ошибаюсь? (поскольку почти каждый метод возвращает void !!)

Adam Naylor 18.12.2008 13:52

MDX, если я правильно помню, больше использовать не следует. Вместо этого вы можете попробовать XNA. В любом случае функция, возвращающая void, скорее всего, сигнализирует об ошибке, вместо этого генерируя исключение.

OregonGhost 18.12.2008 16:11

MDX - это тонкая оболочка COM. Таким образом, он скрывает фактические детали COM, оставаясь при этом примерно эквивалентным ему, что может быть причиной того, что методы возвращают void.

OregonGhost 18.12.2008 16:13

В этом есть смысл! Что касается комментария XNA ... я чувствую себя достаточно грязным, используя управляемый directx, поэтому я не хотел бы делать решительный шаг и использовать `` игрушку '', такую ​​как XNA;)

Adam Naylor 18.12.2008 18:59

XNA на самом деле не игрушка. В дикой природе есть впечатляющие демоверсии (например, на YouTube), и они даже работают на XBox 360. И поверьте мне, это намного интереснее, чем MDX.

OregonGhost 19.12.2008 13:17

Другие вопросы по теме