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.