Du suchst doch nach dem nächsten Konstruktor ohne Parameter, oder?
Wenn deine Klasse aber keine Konstruktor deklariert, dann wirst du in
rt.GetDeclaredMethods
keine Konstruktoren finden.
Wegen mir müsste man sich also durch die Vererbung wühlen und das sähe dann so aus:
Delphi-Quellcode:
function CreateInstance(AClass: TClass): TObject;
var
ctx: TRttiContext;
rt : TRttiInstanceType;
rm : TRttiMethod;
begin
ctx := TRttiContext.create;
try
rt := ctx.GetType(AClass.ClassInfo).AsInstance;
while Assigned(rt)
do
begin
for rm
in rt.GetDeclaredMethods
do
begin
if (rm.IsConstructor)
and (Length(rm.GetParameters)=0)
then
begin
result := rm.Invoke(AClass, [ ]).AsObject;
Exit;
end;
end;
rt := rt.BaseType;
end;
raise Exception.create('
Fehlermeldung');
finally
ctx.Free;
end;
end;
Und statt
Delphi-Quellcode:
Supports(dm.Ainst,IVTDialogCall,intf);
if (intf <> NIL) then
result := intf.Call(value);
könntest du auch
Delphi-Quellcode:
if Supports(dm.Ainst,IVTDialogCall,intf) then
result := intf.Call(value);
schreiben (ist nur eine Kleinigkeit)