Подробности CALLBACK
От: THEOS  
Дата: 09.04.02 02:14
Оценка:
Чем интересна "CALLBACK" функция в чём её смысл, особенности и чем она отличается от функции типа callforward :).
Подробности CALLBACK
От: Alex Fedotov США  
Дата: 09.04.02 04:51
Оценка: 9 (1) :)
#Имя: FAQ.winapi.callback
Здравствуйте THEOS, Вы писали:

THEOS>Чем интересна "CALLBACK" функция в чём её смысл, особенности и чем она отличается от функции типа callforward .


Ничем. Callback-функциями называют такие функции, которые реализуются в приложении, а вызываются операционной системой (или, в общем случае, другим модулем). Типичный пример callback-функции — функция окна.

Поскольку вызывающий callback-функцию код уже написан и скомпилирован, типы аргументов и способ передачи аргументов (calling convention) строго определены. Так, например, функция окна обязательна должна соответствовать следующему прототипу:

LRESULT __stdcall WindowProc(
    HWND hWnd,
    UING nMsg,
    WPARAM wParam,
    LPARAM lParam
    );


Все callback-функции в Win32 имеют соглашение о вызове __stdcall. Макрос CALLBACK, используемый в объявлении таких функций, определен как

#define CALLBACK __stdcall


и несет двоякую роль: c одной стороны он устанавливает правильное соглашение о вызове (что можно сделать и без его помощи, как показано в примере выше), а с другой — сообщает о том, что объявляемая функция используется в качестве callback-функции. Поэтому чаще всего можно встретить объявление функции окна в таком виде:

LRESULT CALLBACK WindowProc(
    HWND hWnd,
    UING nMsg,
    WPARAM wParam,
    LPARAM lParam
    );


который полностью эквивалентен предыдующему.
-- Alex Fedotov
Re[2]: Подробности CALLBACK
От: Алекс Россия http://wise-orm.com
Дата: 09.04.02 06:51
Оценка:
Здравствуйте Alex Fedotov, Вы писали:

AF>Здравствуйте THEOS, Вы писали:


THEOS>>Чем интересна "CALLBACK" функция в чём её смысл, особенности и чем она отличается от функции типа callforward .


AF>Ничем. Callback-функциями называют такие функции, которые реализуются в приложении, а вызываются операционной системой (или, в общем случае, другим модулем). Типичный пример callback-функции — функция окна.


AF>Поскольку вызывающий callback-функцию код уже написан и скомпилирован, типы аргументов и способ передачи аргументов (calling convention) строго определены. Так, например, функция окна обязательна должна соответствовать следующему прототипу:


AF>
AF>LRESULT __stdcall WindowProc(
AF>    HWND hWnd,
AF>    UING nMsg,
AF>    WPARAM wParam,
AF>    LPARAM lParam
AF>    );
AF>


AF>Все callback-функции в Win32 имеют соглашение о вызове __stdcall. Макрос CALLBACK, используемый в объявлении таких функций, определен как


AF>
AF>#define CALLBACK __stdcall
AF>


AF>и несет двоякую роль: c одной стороны он устанавливает правильное соглашение о вызове (что можно сделать и без его помощи, как показано в примере выше), а с другой — сообщает о том, что объявляемая функция используется в качестве callback-функции. Поэтому чаще всего можно встретить объявление функции окна в таком виде:


AF>
AF>LRESULT CALLBACK WindowProc(
AF>    HWND hWnd,
AF>    UING nMsg,
AF>    WPARAM wParam,
AF>    LPARAM lParam
AF>    );
AF>


AF>который полностью эквивалентен предыдующему.


Круто! Тебе бы учебники писать!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.