Функции обратного вызова
Другое очень важное понятие в Windows-программировании - это понятие функции обратного вызова (callback-функции). Функцией обратного вызова называется функция приложения, которая никогда не вызывается напрямую другими функциями или процедурами этого приложения (хотя ничто не запрещает это делать), а вызывается операционной системой Windows. Это позволяет Windows общаться с приложением напрямую посредством различных параметров, определенных как функции обратного вызова. К этим функциям выдвигаются требования: во-первых, эти функции должны быть именно функциями, а не методами класса (хотя это иногда можно обойти); во-вторых, эти функции должны быть написаны в соответствии с моделью вызова stdcall.
В качестве примера такой функции может послужить функция EnumWindows. В справочной системе она описана следующим образом:
BOOL EnumWindows(WNDENUMPROC lpEnumFunc, LPARAM lParam);
В Windows.pas она имеет вид:
function EnumWindows (lpEnumFunc: TFNWndEnumProc; lParam: LPARAM : BOOL;
stdcall
В качестве первого параметра должен быть указатель на функцию обратного вызова. Синтаксис прототипа этой функции описан так (поскольку это только прототип, то реальное имя может быть любым):
BOOL CALLBACK EnumWindowsProc (HWND hwnd LPARAM lParam);
Любым может быть и тип самой функции тип второго параметра, который разработчик может использовать по своему усмотрению, лишь бы его длина не превышала 32 бит.
Пример функции обратного вызова для случая, когда второй параметр имеет тип Longint, будет в Delphi выглядеть так:
function MyCallbackFunction (Wnd: Hwnd; P: Longint) :Bool; stdcall; begin
{ что-то делается } end;
var
MyVar: Longint;
EnumWindows(@MyCallbackFunction, Longint(MyVar));
Комментарии (0)