estoy trabajando en Delphi XE, ventanas 7.clases "no utilizados" se pondrá a disposición en Delphi XE
En una aplicación Deseo habilitar diferentes tipos de informes para mis usuarios a seleccionar. Para hacer esto, tengo 1 clase de informe base y una subclase por tipo de informe (xml, csv, ppt, etc.).
{Just an illustrating example}
TBaseReport = class
public
constructor Create;
procedure GenerateReport; virtual; abstract;
class function ReportType: string; virtual; abstract;
end;
T*Report = class(TBaseReport);
//Etcetera.
Lo que quiero hacer es usar Rtti para detectar todas las clases de informes y enumerar sus ReportType. Después de eso, quiero usar Rtti para crear una instancia de la clase de informe elegida y llamar a GenerateReport. En general, esto no es demasiado difícil de lograr.
Sin embargo, hay un inconveniente importante: nunca me resulta difícil codificar el uso de las clases descendentes, por lo que el código no se incluye en el ejecutable.
¿Hay alguna forma decente de forzar al enlazador/compilador a incluir estas clases?
Un problema sería simular el uso de los informes en su sección de inicialización, pero prefiero no hacerlo. Una mejor solución es hacer que la clase base sea persistente y llamar a 'RegisterClass (T * Report);' en la sección de inicialización. Funciona, pero no veo ninguna otra necesidad para que sean persistentes, así que de nuevo, prefiero no hacer eso. Por otro lado, ¿tal vez esta es la única forma de hacerlo?
Gracias de antemano.
Esta es la manera de hacerlo. En cuanto a su punto final, no tanto RTTI como más código –
Veo que el alcance de STRONGLINKTYPES es GLOBAL. ¿Sabes si también hay un equivalente local disponible? – deColaman
Solo lo activé para que mi aplicación verifique el aumento en el tamaño del archivo. El exe creció de 8.3MB a 9.9MB. Aunque esto parece mucho, los beneficios superan el tamaño extra, creo. – deColaman