Ich arbeite in Delphi XE, windows 7.Kann „ungenutzt“ Klassen in Delphi XE zur Verfügung gestellt werden
In einer Anwendung ich verschiedene Berichtstypen für meine Benutzer auswählen aktivieren möchten. Um dies zu tun, habe ich 1 Base-Bericht-Klasse und eine Unterklasse pro Berichtstyp (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.
Ich möchte Rtti verwenden, um alle Berichtsklassen zu erkennen und ihren ReportType aufzulisten. Danach möchte ich mit Rtti eine Instanz der gewählten Berichtklasse erstellen und GenerateReport aufrufen. Alles in allem ist dies nicht schwer zu erreichen.
Allerdings gibt es einen großen Nachteil: Ich bin nie hart Codierung der Verwendung der absteigenden Klassen, so wird der Code nicht in der ausführbaren Datei enthalten.
Gibt es eine anständige Möglichkeit, den Linker/Compiler zu zwingen, diese Klassen einzuschließen?
Eine (n hässliche) Arbeit wäre es, die Verwendung der Berichte in ihrem Initialisierungsabschnitt zu simulieren, aber das würde ich lieber nicht tun. Eine bessere Lösung besteht darin, die Basisklasse persistent zu machen und "RegisterClass (T * Report)" aufzurufen. im Initialisierungsabschnitt. Es funktioniert, aber ich sehe keine andere Notwendigkeit, sie hartnäckig zu machen, also würde ich das lieber nicht tun. Auf der anderen Seite, vielleicht ist dies der einzige Weg, es zu tun?
Vielen Dank im Voraus.
Dies ist der Weg, es zu tun. In Bezug auf Ihren Endpunkt, nicht so viel mehr RTTI als mehr Code –
Ich sehe, dass der Geltungsbereich von STRONGLINKTYPES GLOBAL ist. Weißt du, ob es auch eine lokale Entsprechung gibt? – deColaman
Ich habe es gerade für meine Anwendung eingeschaltet, um die Zunahme der Dateigröße zu überprüfen. Die exe wuchs von 8.3MB auf 9.9MB. Obwohl dies viel erscheint, überwiegen die Vorteile die zusätzliche Größe, die ich denke. – deColaman