Форум программистов, компьютерный форум, киберфорум
Наши страницы

Не понятно что делает __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++
Создать приложение которое бы -обрабатывала текст -печатала весь текст -печать файла ***печать всех слов содержащих букву А -печать первого слова каждой строки Помогите пожалуйста, буду очень...
C++ Не получается создать класс Account из книги Дейтелов
Задача: Создайте класс с именем Account, которым мог бы воспользоваться банк для представления банковских счетов своих клиентов. Ваш класс должен иметь один элемент данных типа int для...
C++ Напечатать слова последовательности, которые отличны от последнего слова и удовлетворяют заданным свойствам http://www.cyberforum.ru/cpp-beginners/thread1497610.html
Дана последовательность, содержащая до 5 слов, в каждом из которых до 5 строчных латинских букв; между соседними словами — не менее одного пробела, за последним словом точка. Напечатать те...
C++ Какая скорость ввода gets? Собственно какая скорость ввода gets? К примеру у scanf'a 2 секунды, а gets'a? подробнее

Показать сообщение отдельно
ninja2
231 / 187 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
13.07.2015, 10:14  [ТС]
Вообще эта штука
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
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.