![]() |
Klassen per String instanhziieren
Moin.
Ich meine mal sowas gemacht zu haben, dass man in Delphi eine Klasse nur mit einem String instanziieren kann. Ich möchte nämlich in einer Datei einen Klassennamen konfigurieren um dann eine Klasse zu laden: Irgendwie so:
Delphi-Quellcode:
Ich meine mal sowas gesehen zu haben (lang lang ists her), um Objekte aus einem Stream zu lesen. Ich meine Turbo Vision (Turbo Pascal 6) hat das mal so gemacht um Dialogelemente zu lesen.
var
s : String; o : TCommand; begin s := 'TMyObject'; o := Class.Load(s); o.doSomeThing(); |
Re: Klassen per String instanhziieren
Ich denke, FindClass sollte dir da weiterhelfen.
|
Re: Klassen per String instanhziieren
FindClass findet aber nur Klassen, welche vorher auch entsprechend registriert wurden.
|
Re: Klassen per String instanhziieren
Es ist etwas kompizierter aber es geht.
Zunächst die Klasse definieren.
Delphi-Quellcode:
Dann über FindClass eine Klassenreferenz laden und mit newinstance eine Instanz der Klasse (zuvor natürlich die Klasse registrieren) und (!!) die Klasse muss von TPersistenz erben.
type
TCommand = class(TPersistent) public function execute(AContext: TContext) : boolean; virtual; end; TCommandClass = class of TCommand;
Delphi-Quellcode:
procedure TCatalogFactory.loadCatalogData(fname: String; ac : TContext);
var o : TCommand; tc : TCommandClass; s : String; begin s := 'TCommand'; //..... Name der Klasse laden, später aus Datei tc := TCommandClass(FindClass(s)); o := TCommand(tc.newinstance); o.execute(ac); end; initialization RegisterClass(TCommand); end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:26 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz