Программирование: CreateCallback

Прототип

function CreateCallback(Method: AnyMethod): NativeInt;

Описание

Позволяет выполнять обратные вызовы из функций DLL (подобно функциям API Windows) напрямую в функции сценария.

Комментарии

В 32-разрядном установщике параметры обратного вызова, передаваемые по значению, не поддерживаются, если их тип превышает 4 байта, например, Int64, Double, Extended или Currency, а также если это запись размером более 4 байт. 64-разрядные установщики не имеют такого ограничения.

В 32-разрядном установщике также не поддерживаются возвращаемые значения обратного вызова, если они не возвращаются через регистр, например запись, массив или множество размером более 4 байт, а также запись или массив размером 3 байта. В 64-разрядных установщиках такого ограничения нет.

Пример

function SetTimer(hWnd: HWND; nIDEvent: UINT_PTR; uElapse: UINT; lpTimerFunc: NativeInt): UINT_PTR;
external 'SetTimer@user32.dll stdcall';

var
  TimerCount: Integer;

procedure MyTimerProc(Arg1: HWND; Arg2: UINT; Arg3: UINT_PTR; Arg4: DWORD);
begin
  Inc(TimerCount);
  WizardForm.BeveledLabel.Caption := ' Timer! ' + IntToStr(TimerCount);
  WizardForm.BeveledLabel.Visible := True;
end;

procedure InitializeWizard;
begin
  SetTimer(0, 0, 1000, CreateCallback(@MyTimerProc));
end;