Здравствуйте 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    Оценить