Ver Mensaje Individual
  #15  
Antiguo 07-03-2007
AFilth AFilth is offline
Miembro
 
Registrado: ago 2005
Posts: 119
Reputación: 19
AFilth Va por buen camino
Vamos alla con la explicación, lo intentaré lo mejor que pueda aunque es algo que no he implementado yo y lo mismo meto la pata por algún lado...

Por una lado tengo mi proyecto principal, desde donde hago el
Código Delphi [-]
SetObjectProp(MiObjeto, 'Propiedad', Valor);

Por otro lado tengo una bpl en la que está la ClaseA, esta bpl no se carga dinámicamente.

Y finalmente tengo otra bpl que se carga dinámicamente con la ClaseB, esta clase hereda de la ClaseA, ya que en su uses hace referencia a las units de la bpl donde está contenida la ClaseA.

Normalmente en la aplicación se cargan objetos de la ClaseA, pero cuando se cumplen una serie de condiciones, se carga la BPL donde está contenida la ClaseB y en vez de crearse los objetos de ClaseA se crean de ClaseB.

Bueno, ahora empieza lo difícil, a ver si soy capaz de explicarlo bien...

En mi bpl donde está contenida la ClaseA se hace lo siguiente:
Código Delphi [-]
PClaseA= class of ClaseA;
VAR
TClaseN: PClaseA;

y luego:
Código Delphi [-]
initialization
  TClaseN := ClaseA;

La bpl donde está contenida la Clase B (la que era dinámica) hace:

Código Delphi [-]
PClaseB= class of ClaseA;
VAR
TClaseN: PClaseB;

y luego:
Código Delphi [-]
initialization
  TClaseN := ClaseB;

Luego en todos los Creates y demás métodos, como son override lo que se usa es El TClaseN.Create. Así se consiguen crear objetos de una clase o de otra dependiendo de las circunstancias.

Por lo tanto cuando yo, desde mi proyecto principal hago referencia a un objeto, éste puede ser en realidad de ClaseA ó de ClaseB dependiendo de si se cargo la bpl dinámica ó no.

Espero haberme explicado más o menos con claridad, aunque no sé yo porque ni yo mismo lo entiendo demasiado bien...

Un saludo.
Responder Con Cita