Newsgroup: it.comp.lang.delphi
Titolo: Esecuzione di una funzione

Vorrei poter lanciare una procedura o una funzione in base al suo nome
(grazie) ma facendo ciň utilizzando che so una stringa che di volta in
volta contenga il nome di una funzione piuttosto che un'altra.
Grazie a
tutti
--------------------------------
Inviato via 
http://usenet.iol.it

volta contenga il nome di una funzione piuttosto che un'altra.
procedure Topolino ;
begin
  ...
end ;
procedure Pippo ;
begin
  ...
end ;
procedure Minnie ;
begin
  ...
end ;
procedure Lancia( NomeProc : String ) ;
begin
  if ( NomeProc = 'Topolino' ) then Topolino 
  else 
  if ( NomeProc = 'Pippo' ) then Topolino 
  else 
  if ( NomeProc = 'Minnie' ) then Topolino 
end ;
--
CyberWalkie - walkietalkie(at)
libero.it

 volta contenga il nome di una funzione piuttosto che un'altra.
Ciao,
una soluzione abbastanza semplice è quella di scrivere una DLL contenente
le funzioni/procedure che vuoi richiamare.
Poi dal programma principale, una volta caricata la DLL (LoadLibrary),
puoi ottenere l'inidirizzo delle funzioni con GetProcAddress (che vuole
appunto
una stringa).
Consulta la documentazione di queste due API e l'argomento
Dynamic-Link Libraries
Ciao! Davide DG.

end ;
...perchè ho subito pensato ai tipi procedurali? Che mente contorta
che ho! :(
Ciao!
Peppe
_____
ICQ #9759626
http://members.xoom.it/joe
Togli levaccà per contattarmi via email.

Ciao! Davide DG.
Non avresti mica un esempio su quanto mi
hai appena suggerito.


 tutti
e se fai una procedura che tramite confronti stabilisce quale funzione
richiamare ?
Oppure ci sono i metodi MethodName e MethodAddress che ti restituiscono il
nome o il puntatore ad un determinato metodo.
Poi per richiamarlo, mi pare solo una via tortuosa se i metodi sono
tantissimi e diversi fra loro, oppure io non ci sono abituato.
Ti saluto....ciao ciao !!
Antonio Tarolla

end ;
E' ovvio che volevi scrivere:
procedure Lancia( NomeProc : String ) ;
begin
  if ( NomeProc = 'Topolino' ) then Topolino 
  else 
  if ( NomeProc = 'Pippo' ) then Pippo 
  else 
  if ( NomeProc = 'Minnie' ) then Minnie 
end ;
-- 
So I dub thee Unforgiven.

 end ;
No... č che Topolino, si sa, ha manie di grandezza ;PP
Ciao! Davide DG.

prova

nome o il puntatore ad un determinato metodo.
Esiste anche un metodo molto elegante che si rifa' alla OOP:
type
  TMyAbstrFunction = class
    public
      procedure Execute(parametri); virtual; abstract;
  end;
  TMyFunction1 = class(TMyAbstrFunction)
    public
      procedure Execute(parametri); override;
  end;
 
  TMyFunction2 = class(TMyAbstrFunction)
    public
      procedure Execute(parametri); override;
  end;
  ecc ecc
Poi da qualche parte si istanzia l'oggetto TMyAbstrFunction desiderato
(sarebbe meglio in una Factory):
  if NomeFun='Pippo' then
    result:=TMyPippoFunction.Create
  else if NomeFun='Topolino' then
    result:=TMyTopolinoFunction.Create;
Il vantaggio e' che il parametro della funzione da creare si specifica
solo all'inizio, e ci si porta dietro un oggetto che realizza la
funzione desiderata senza bisogno di sapere qual'e'. Ovviamente per
situazioni semplici non vale la pena...
Ciao
--
Piero Bonanno
bop...@libero.it
pie...@tiscalinet.it
bpie...@hotmail.com
______________________________________________
"Madame, lei ha tra le gambe uno strumento
che puo' offrire piacere a migliaia di persone,
e tutto quello che sa fare e' grattarlo"
- Sir Thomas Beechan a una violoncellista