Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Описание функции как CALLBACK, Надо или нет? 
:(
    Опции темы
Peter
Дата 25.1.2005, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Изучал книжку Ч.Калверта "Программирование под Win32. Освой самостоятельно". Там говорится про callback-функции.
Если я правильно понял, то это такие функции, которые вызывает Windows. Причем в Win16 их экземпляры надо было создавать при помощи MakeProcInstance. Подскажите, надо ли их в Win32 описывать как CALLBACK или же это пережитки Win16?


--------------------
всё, что делаете, делайте от души, как для Господа (Послание апостола Павла колоссянам, 3:23).
PM MAIL WWW   Вверх
Peter
Дата 27.1.2005, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Для вызова функции операционной системой необходимо должным образом описать правило ее вызова. В winuser.h (или в winbase.h - не помню) можно прочитать
Код
#define CALLBACK __stdcall

или
Код
#define CALLBACK __pascal

в зависимости от установок системы.

Вопрос закрыт.


--------------------
всё, что делаете, делайте от души, как для Господа (Послание апостола Павла колоссянам, 3:23).
PM MAIL WWW   Вверх
Fixin
Дата 27.1.2005, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ёжик
***


Профиль
Группа: Комодератор
Сообщений: 1357
Регистрация: 6.1.2004

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



smile Тоже по этой книге учился.
PM MAIL ICQ   Вверх
Fixin
Дата 30.1.2005, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ёжик
***


Профиль
Группа: Комодератор
Сообщений: 1357
Регистрация: 6.1.2004

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



Коллбэки "в основном" вызываются процессами. Я думаю так, но никогда этим не занимался.
PM MAIL ICQ   Вверх
Да гость я...
Дата 16.2.2005, 07:41 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата
CALLBACK - Calling convention for callback functions © MSDN


Во времена Win16 CALLBACK определялся как FAR PASCAL (или __far __pascal), т.е. соглашение вызова (порядок помещения аргументов в стек, ответственость за очистку стека, декорация имени и т.д.) ф-ции WinProc было в стиле Паскаля.

В Win32 CALLBACK, а также WINAPI определены как __stdcall. Соглашения вызова ВСЕХ Win32 API ф-ций - __stdcall.

А в общем случае callback-функция это такая, к-рая вызывается в нек-ром framework-коде по определённой для нее переменной-указателю. И в общем случае все, что известно о callback-ф-ции - это её прототип.
Тело callback-ф-ции должно быть определено пользователем и присвоено вышеуказанной переменной-указателю, тогда этот некий framework сможет ее вызвать, т.к. framework обычно инициализирует эту переменную нулем, а тогда и вызывать нечего.

Любой обработчик события, скажем CButton::DBlClick() в том же MFC - также callback-функция.
Т.е. известен её прототип, имеется её переменная-указатель, к-рая = 0, покуда юзер не напишет конкретный handler, адрес к-рого будет присвоен соответствующей переменной-указателю на ф-цию объекта данного класса (CButton в данном примере).
  Вверх
bel_nikita
Дата 16.2.2005, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

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





--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

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


 




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


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

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