Marco van de Voort wrote:
How does it work effectively? So something like:
procedure proc1(x:longint);
procedure proc2(x:longint);
begin end;
begin end;
type myproctype=procedure(x:longint);
procedure proc3(x:pointer);
begin myproctype(x); end;
begin proc3(@proc1); proc3(@proc2); end;
This does not work because 1) `myproctype(x)' lacks an argument to the called procedure, and 2) your "main program" does not know `proc2' which is local to `proc1'. The following _does_ work: program foo; type myproctype=procedure(x:longint); procedure proc3(x:pointer); begin myproctype(x)(21); end; procedure proc1(x:longint); procedure proc2(y:longint); begin writeln(2*x) end; begin proc3(@proc2) end; begin proc3(@proc1) end. GPC uses "trampolines" to pass the pointer of the local procedure. (See `info -f jarg400 -n trampoline'.) Peter -- http://home.pages.de/~Peter.Gerwinski/ - G-N-U GmbH: http://www.g-n-u.de Maintainer GNU Pascal - http://home.pages.de/~GNU-Pascal/ - gpc-19990118 GnuPG key fingerprint: 9E7C 0FC4 8A62 5536 1730 A932 9834 65DB 2143 9422 keys: ftp://ftp.gerwinski.de/pub/keys/ - AntiSpam: http://spam.abuse.net