Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Передача локальной процедуры в функцию в качестве параметра [D6, WinXP]


BofA ©   (2002-10-29 20:37:00) 

Примерно так:
type TProc=procedure(a:Integer);

function F(P : TProc);
begin
...
end;

function Main(...):...;
procedure P1(a:Integer)
begin
...
end;
begin
...
Tmp:=F(P1);
...
end;


В ответ на это ругается, говорит, что нельзя локальную процедуру передавать. Что можно сделать?


VaS   (2002-10-29 21:27:00) [1]


type
TProc = procedure(i: integer);

procedure DoProc(Proc: Pointer);
begin
TProc(Proc)(45);
end;

procedure TForm1.Button2Click(Sender: TObject);
procedure Proc(i: integer);
begin
end;

begin
DoProc(@Proc);
end;


down   (2002-10-29 21:22:00) [2]

Можно обмануть компилятор, например, так:
F(TProc(@Proc1));
но это может привести к печальным последствиям


BofA   (2002-10-29 21:02:00) [3]

downНеужели всё так плохо?
Peter GluhiyК сожалению нет (я привёл только упрощённый пример, в программе всё сложнее).


Peter Gluhiy   (2002-10-29 20:47:00) [4]

А так устроит?

type TProc=procedure(a:Integer);

function F(P : TProc);
begin
...
end;

procedure P1(a:Integer)
begin
...
end;

function Main(...):...;
begin
...
Tmp:=F(P1);
...
end;


down   (2002-10-29 20:46:00) [5]

ничего, нельзя локальную процедуру передать


Наверх

Титульная страница Поиск, карта сайта Написать письмо