Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Названия в WinAPI 
V
    Опции темы
Hagrael
Дата 10.8.2011, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 143
Регистрация: 26.6.2011

Репутация: нет
Всего: нет



Здравствуйте, товарищи программисты. Хотелось бы узнать, пишите ли вы LRESULT или же long; пишите ли вы пустые (насколько я понял) слова вроде CALLBACK? Используете ли венгерскую нотацию? Делаете ли вы все это, программируя под Windows?
PM MAIL   Вверх
bsa
Дата 10.8.2011, 11:37 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Обычно, программируя под Windows (и не только), мало кто пишет на WinAPI... Так как это трудная, кропотливая и неблагодарная работа. Если же для самоутверждения тебе необходимо это делать, то писать LRESULT и CALLBACK необходимо. Так как никто не застрахован от изменений в будущем.
"Венгерскую нотацию" в том виде, что используется в WinAPI, мало кто считает достойным стилем.
PM   Вверх
Hagrael
Дата 10.8.2011, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 143
Регистрация: 26.6.2011

Репутация: нет
Всего: нет



Цитата(bsa @  10.8.2011,  11:37 Найти цитируемый пост)
писать LRESULT и CALLBACK необходимо. Так как никто не застрахован от изменений в будущем.

Простите, bsa, но я вас не совсем понял. LRESULT и CALLBACK - макросы, второй из которых обозначает пустоту. Так что можно сразу же писать long и... пустоту smile Или же нет?
PM MAIL   Вверх
spyswamp
Дата 10.8.2011, 14:26 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 349
Регистрация: 18.8.2006

Репутация: 1
Всего: 7



Hagrael, значения макросов однажды могут поменять. ;) Вот и думай: писать или нет. Обычно при работе с WinAPI я пишу всю эту муть "на всякий случай".


--------------------
- why you call it beta?
- cuz it's betta then nothin'
PM MAIL   Вверх
Hagrael
Дата 10.8.2011, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 143
Регистрация: 26.6.2011

Репутация: нет
Всего: нет



Понятно. Но почему когда я зачеркиваю надпись CALLBACK, выводится такая ошибка:
invalid conversion from 'LRESULT (*)(HWND__*, UINT, UINT, LONG)' to 'LRESULT (*)(HWND__*, UINT, WPARAM, LPARAM)'|

Фактически, это ведь тоже самое, что
cannot convert from LRESULT to LRESULT
o_O
PM MAIL   Вверх
volatile
Дата 10.8.2011, 23:40 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 16
Всего: 85



Цитата(Hagrael @  10.8.2011,  14:35 Найти цитируемый пост)
Но почему когда я зачеркиваю надпись CALLBACK, выводится такая ошибка

Потому что CALLBACK это способ вызова функций. Там параметры передаются не как в С, а наоборот.
И еще ряд тонкостей. Поэтому CALLBACK опускать ни в коем случае нельзя.

Цитата(Hagrael @  10.8.2011,  11:28 Найти цитируемый пост)
пустые (насколько я понял) слова вроде CALLBACK? 

С чего это вы взяли что пустые?
Цитата


#define CALLBACK    __stdcall



PM MAIL   Вверх
Hagrael
Дата 11.8.2011, 09:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 143
Регистрация: 26.6.2011

Репутация: нет
Всего: нет



А у __stdcall в свою очередь 3 определения. Как такое может быть? Причем второе объявление вызывает функция __attribute__ которая ничего не пишет.
PM MAIL   Вверх
xvr
Дата 11.8.2011, 09:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(Hagrael @  11.8.2011,  09:01 Найти цитируемый пост)
Как такое может быть? 

Не может. __stdcall это зарезервированное слово С/С++ (из расширений MS). Обозначает способ вызова функции (calling convension)

Добавлено через 39 секунд
Цитата(Hagrael @  11.8.2011,  09:01 Найти цитируемый пост)
Причем второе объявление вызывает функция __attribute__

А это зарезервированное слово из расширений GCC


PM MAIL   Вверх
Hagrael
Дата 11.8.2011, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 143
Регистрация: 26.6.2011

Репутация: нет
Всего: нет



Почитал-почитал, и ничего, сказать по правде, не понял. В чем отличие __stdcall функции от обычной?

Можно ли создать свой собственный особый тип функций?
PM MAIL   Вверх
asmdzen
Дата 11.8.2011, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



**


Профиль
Группа: Участник
Сообщений: 345
Регистрация: 28.11.2010

Репутация: 3
Всего: 5



Цитата(Hagrael @  11.8.2011,  15:30 Найти цитируемый пост)
В чем отличие __stdcall функции от обычной?

если коротко, stdcall - стек выравнивает вызванная функция, cdecl - стек выравнивает вызывающая сторона (поскольку она знает сколько именно параметров передала)
PM MAIL   Вверх
Hagrael
Дата 11.8.2011, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 143
Регистрация: 26.6.2011

Репутация: нет
Всего: нет



asmdzen, понятно. А что по производительности лучше, и где какой вариант применять?
По умолчанию, как я понял, функция становится cdecl?
PM MAIL   Вверх
bsa
Дата 11.8.2011, 17:22 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(Hagrael @  11.8.2011,  17:19 Найти цитируемый пост)
А что по производительности лучше, и где какой вариант применять?

Не заморачивайся. По скорости разницы практически нет. Имхо, теоретически, cdecl может быть быстрее.
Цитата(Hagrael @  11.8.2011,  17:19 Найти цитируемый пост)
По умолчанию, как я понял, функция становится cdecl? 

Да. Но многое еще зависит от настроек компилятора.

Это сообщение отредактировал(а) bsa - 11.8.2011, 17:22
PM   Вверх
Hagrael
Дата 11.8.2011, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 143
Регистрация: 26.6.2011

Репутация: нет
Всего: нет



Большое спасибо, вопрос решен.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1227 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.