Tuesday, April 22, 2008

YUGOP

Il sito più bello di internet!
Da vedere lo storico.

Friday, April 04, 2008

Eval e Persistenza in Delphi

Ho affrontato un progetto in ACCESS molto interessante e per il quale ho usato la funzione Eval. Per chi non lo sapesse, questa funzione riceve una stringa e ne fa la valutazione. Per esempio Eval("2 + 3") ritorna 5.
Come stringa si può passare anche il nome di una funzione scritta da noi purchè con visibilità Public.

A questo punto mi sono chiesto come si potesse fare una cosa simile in Delphi, cioè chiamare una funzione usando il suo nome.
Ho trovato un esempio molto pertinente su About.com. Funziona a queste condizioni:
1. La procedura/funzione deve essere un metodo di una classe
2. Deve essere published (vedi punto 3)
3. La classe deve essere derivata da TPersistent o deve essere compilata con la direttiva {M+}

In Delphi è necessario che la classe abbia le informazioni di runtime (RTTI) per i metodi che si vogliono richiamare usando il loro nome. Le informazioni recuperabili tramite RTTI sono altrettanto utili per implementare la Persistenza, cioè la capacità di salvare lo stato degli oggetti creati all'interno di un programma.

Altri link interessanti sulla RTTI:
1. IMetal
2. Delphi Power Unleashed
3. Vari post sul Hallvard's Blogs come questo.