Я пробовал очень долго, чтобы найти ответ для этого, но ничего не нашел. Я пытаюсь передать обратный вызов с данными в функцию.Обратный вызов с параметрами и результатом
Это мой псевдокод:
TGetFreeNumber = function(data: Pointer): integer;
procedure TMyClass.AddToDatabase(cb: TGetFreeNumber{???});
var
num: integer;
begin
num := {{Invoke cb with parameters}};
// INSERT INTO ... VALUES num ...
end;
procedure TMyClass.impl1(from, till: integer);
function myCB(data: Pointer);
begin
result := 123;
end;
begin
AddToDatabase(@myCB(someData){???});
end;
procedure TMyClass.impl2(from, till: integer);
function myCB(data: Pointer);
begin
result := 456;
end;
begin
AddToDatabase(@myCB(someData){???});
end;
Я сделал некоторые эксперименты с TMethod, но я не найти подходящий метод Invoke как
procedure TMyClass.AddToDatabase(cb: TMethod);
var
num: integer;
begin
num := Invoke(cb.Code, cb.Data);
// INSERT INTO ... VALUES num ...
end;
Передача вложенные функций не является хорошей идеей. –
Да, локальные функции несовместимы с процедурными типами, такими как 'TGetFreeNumber'. – kludg