Форум программистов, компьютерный форум CyberForum.ru

Не понятно что делает __success(return >= 0) - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Распознаватель речи http://www.cyberforum.ru/cpp-beginners/thread1497698.html
Здравствуйте! Хочу написать программу в которой нужно будет преобразовывать звук в текст и делать с ним определенные действия. Для этого нужен распознаватель речи, готовый брать не хочу, т.к. есть время и желание сделать самому! Подскажите литературу по данной теме без лишней воды! И если возможно дайте оценку сложности - под силу ли данная задача начинающему?
C++ Найти количество островов из единиц Здравствуйте, есть задачка. Задача Острова Каждый элемент квадратной матрицы размеренности N x N равен нулю, либо единице. Найдите количество «островов», образованных единицами. Под «островом» понимается группа единиц (либо одна единица), со всех сторон окруженная нулями (или краями матрицы). Единицы относятся к одному «острову», если из одной из них можно перейти к другой «наступая» на... http://www.cyberforum.ru/cpp-beginners/thread1497694.html
C++ Не получается создать класс Account из книги Дейтелов
Задача: Создайте класс с именем Account, которым мог бы воспользоваться банк для представления банковских счетов своих клиентов. Ваш класс должен иметь один элемент данных типа int для представления банковского баланса.Класс должен предусматривать конструктор для инициализации элемента данных. Конструктор должен подтверждать значение начального баланса и гарантировать, что оно больше или...
C++ Напечатать слова последовательности, которые отличны от последнего слова и удовлетворяют заданным свойствам
Дана последовательность, содержащая до 5 слов, в каждом из которых до 5 строчных латинских букв; между соседними словами — не менее одного пробела, за последним словом точка. Напечатать те слова последовательности, которые отличны от последнего слова и удовлетворяют следующему свойству: 1) каждая буква входит в слово не менее двух раз; 2) в слове гласные буквы (a, e, i, o, u)...
C++ Какая скорость ввода gets? http://www.cyberforum.ru/cpp-beginners/thread1497609.html
Собственно какая скорость ввода gets? К примеру у scanf'a 2 секунды, а gets'a?
C++ WinAPI DeleteFile Ошибка доступа Здравствуйте. Я использую вот такой код: if (SetFileAttributes(strFilePath.c_str(), FILE_ATTRIBUTE_NORMAL) == FALSE) {wcout << GetLastErrorAsString().c_str() << endl; return ::GetLastError();} // Delete file if (DeleteFile(strFilePath.c_str()) == FALSE) // удаление файла подробнее

Показать сообщение отдельно
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
13.07.2015, 10:14  [ТС]     Не понятно что делает __success(return >= 0)
Вообще эта штука
C++
1
typedef __success(return >= 0) long HRESULT;
Видимо как BOOL выступает. От есть определение функции при создании COM интерфейсов QueryInterface. Вот ее определение:
C++
1
2
3
4
5
STDMETHODIMP CSpaceship::XMotion::QueryInterface(REFIID iid, LPVOID* ppvObj)
{
    METHOD_PROLOGUE(CSpaceship,Motion)
    return pThis->ExternalQueryInterface(&iid,ppvObj);
}
этот макрос STDMETHODIMP :
C++
1
#define STDMETHODIMP            HRESULT STDMETHODCALLTYPE
HRESULT мы знаем что такое и что такое STD... это просто соглашение о вызовах __stdcall
И получается у нас функция вида:
C++
1
2
3
4
5
__success(return >= 0) __stdcall CSpaceship::XMotion::QueryInterface(REFIID iid, LPVOID* ppvObj)
{
    METHOD_PROLOGUE(CSpaceship,Motion)
    return pThis->ExternalQueryInterface(&iid,ppvObj);
}
там вместо __success(return >= 0) должно хз. наверно стоять BOOL, типо удачно или неудачно получили указатель на интерфейс, а у нас стоить хз что

Только что посмотрел она имеет свое определение вот оно:
C++
1
#define __success(expr)          __allowed(on_function_or_typedecl)
и дальше __allowed
C++
1
#define __allowed(p) __$allowed_##p
что означает знак доллара в макросе хз.????
и идем дальше что? Что то кажется что выражение __success передается выражение которое вернется из функции QueryInterface допустим 0 То у нас 0>=0 получается TRUE и появляется новый макрос __allowed_TRUE или хз. или такой __allowed_0, но таких макросов и определений нету, они не определены, что там происходит хз.
Ну короче таких макросов нету.

ВЫше ошибся, там отакая фигня вызывается __allowed(on_function_or_typedecl) , expr не подставляется, а что такое on_function_or_typedecl хз. его определения нету.

Добавлено через 8 минут
Вот определение ExternalQueryInterfaceв классе CCmdTarget:
C++
1
DWORD ExternalQueryInterface(const void*, LPVOID* ppvObj);
А от определение в IUnknown:
C++
1
2
3
virtual HRESULT STDMETHODCALLTYPE QueryInterface( 
                /* [in] */ REFIID riid,
                /* [iid_is][out] */ __RPC__deref_out void __RPC_FAR *__RPC_FAR *ppvObject) = 0;
Так как мы возвращаем из QueryInterface значинеи типа DWORD, то что получается HRESULT это есть DWORD???? Ничего не ясно, вообще то по идее это должно быть BOOL
 
Текущее время: 07:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru