Чем интересна "CALLBACK" функция в чём её смысл, особенности и чем она отличается от функции типа callforward :).
Здравствуйте 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, Вы писали:
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>который полностью эквивалентен предыдующему.
Круто! Тебе бы учебники писать!