Ver Mensaje Individual
  #2  
Antiguo 28-09-2006
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Reputación: 27
jachguate Va por buen camino
La variable F, como tal es un puntero, un número de 4 bytes que indica una dirección en memoria. Cuando vos haces
Código Delphi [-]
s.Write(F,100);
En realidad estas escribiendo un número de 4 bytes (la dirección que tenía en memoria la instancia que creaste en esa corrida en particular).

Claro que cuando ejecutes otra vez el programa, aún cuando recuperés la dirección, en la memoria no habrá una instancia válida del objeto.

Lo que a vos te hace falta es que tu clase sea auto-persistente, en palabras mas modernas, que sea "serializable".

Esto podrías lograrlo dotando de un par de métodos a la clase, por decir: SaveToStream, LoadFromStream, que se encarguen de escribir y leer todas las propiedades de un stream.

Otra posibilidad, mas elaborada, es que crees una clase que sirva de ancestro a todas tu jerarquía, y que dicha clase tenga la lógica para escribir/leer las propiedades publicadas en un stream. Deben ser las propiedades publicadas porque es para estas para las que tenes información de tipo en tiempo de corrida (RTTI).

Finalmente, podrías derivar tus clases de TComponent (formalmente hablando, que dejen de ser clases y sean componentes), y valerte de los métodos WriteComponent y ReadComponent de un stream. Esto ya implementa, mas o menos, lo que explique antes (valiendose de la clase TWriter y TReader de la VCL).

En fin, este es un tema amplio, con lo dicho pretendo, mas que darte una solución, darte las ideas para que encontres una.

Hasta luego.


Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita