Args.Obj ist eigetnlich ein TObject ... allerdings ist in einem Args.ObjTyp definiert das es sich nun um eine TClass handelt.
Du konvertierst Objektzeiger und Klassenzeiger untereinander hin und her?
Das sind Probleme ja schon vorprogrammiert.
Zitat:
Das problem ist, ich habe keinen zugriff auf die Objekte die ich hier create will.
Tja, dann hast du ein Problem,
denn du kannst nur Methoden aufrufen, welche du an dieser Stelle kennst.
TObjekt kennt nur sein Create und da dieses nicht als virtual/dynamic deklariert ist, kann dieses nicht überschrieben werden, womit abgeleitete klassen dort nicht rankommen.
TObjekt und damit auch TClass kennen natürlich das Create deiner TList nicht, wodurch man darüber Dieses auch nicht aufrufen kann.
Entweder du kämpfst dich über die
RTTI zum richtigen Constuctor der entsprechenden Klasse durch
oder du mußt alle nötigen Klassen selber umwandeln.
Delphi-Quellcode:
if Args.Cls = TList
then
Value := TList.Create
else if Args.Cls = TEdit
then
Value := TEdit.Create
else
raise Exception.Create('
du hast ein Problem');
Wobei man bei sowas wie TEdit z.B. prüfen kann, ob Args.Cls als Vorfahren das TComponent besitzt und kann dann alle Nachfahren von TComponent über TComponent.Create(nil) erstellen, da TComponent einen virtuellen Constructor besitzt, welche alle Nachfahren überschrieben haben sollten.
Aber änder erstmal das
obj: TObjekt
in ein
cls: TClass
und laß das rumgercaste.
PS: Genau darum wurde in TComponent auch ein virtueller Constructor eingeführt, damit der
DFM-Loader alle nötigen
VCL-Komponenten laden kann, ohne deren abgeleitete Create kennen zu müssen.
Der
DFM-Loader kennt das Create von TComponent und da dieses virtuell ist, kann jede abgeleitete Klasse dieses für sich überschreiben und schon kennt der
DFM-Loader auch diese Klassen.
Bzw. er kennt die Adresse des virtuellen Create und nutzt alles, was darin verlinkt ist.