RTTI - Invalid class typecast
Bom dia pessoal, estou tentando, criar uma procedure utilizando RTTI, porém estou tento um retorno de invalid class typecast, alguém poderia me dar uma força!? agradeço desde já.
Segue a classe que eu quero identificar
------ CLASSE CLIENTE
type
TCliente = class
private
Fid : Integer;
Flicenca : ShortString;
Fnome : ShortString;
Ffantasia : ShortString;
...
----- CLASSE CAMPOCLIENTE
type
TCampoClasse = class
private
Fid : Integer;
Flicenca : ShortString;
Fnome : ShortString;
Ffantasia : ShortString;
eu chamo a procedure grava a partir do botão
procedure TForm1.Button1Click(Sender: TObject);
var
f : TCampoClasse;
begin
f.Create(1,
'1111',
'1',
'1');
Grava(TCliente, f);
end;
a procedure onde eu quero identificar
function TForm1.Grava(AClasse : TClass; Fld : TCampoClasse): String;
var
ctxRtti : TRttiContext;
typRtti : TRttiType;
metRtti : TRttiMethod;
aParams : Array of TValue;
begin
ctxRtti := TRttiContext.Create;
try
typRtti := ctxRtti.GetType(AClasse);
metRtti := typRtti.GetMethod('Create');
SetLength(aParams, 3);
aParams[0] := Self;
aParams[1] := FDConnection1;
aParams[2] := Fld;
metRtti.Invoke(ACLasse, aParams); <<<<<------- O ERRO APARECE NESTA PARTE
finally
ctxRtti.Free;
end;
end;
Segue a classe que eu quero identificar
------ CLASSE CLIENTE
type
TCliente = class
private
Fid : Integer;
Flicenca : ShortString;
Fnome : ShortString;
Ffantasia : ShortString;
...
----- CLASSE CAMPOCLIENTE
type
TCampoClasse = class
private
Fid : Integer;
Flicenca : ShortString;
Fnome : ShortString;
Ffantasia : ShortString;
eu chamo a procedure grava a partir do botão
procedure TForm1.Button1Click(Sender: TObject);
var
f : TCampoClasse;
begin
f.Create(1,
'1111',
'1',
'1');
Grava(TCliente, f);
end;
a procedure onde eu quero identificar
function TForm1.Grava(AClasse : TClass; Fld : TCampoClasse): String;
var
ctxRtti : TRttiContext;
typRtti : TRttiType;
metRtti : TRttiMethod;
aParams : Array of TValue;
begin
ctxRtti := TRttiContext.Create;
try
typRtti := ctxRtti.GetType(AClasse);
metRtti := typRtti.GetMethod('Create');
SetLength(aParams, 3);
aParams[0] := Self;
aParams[1] := FDConnection1;
aParams[2] := Fld;
metRtti.Invoke(ACLasse, aParams); <<<<<------- O ERRO APARECE NESTA PARTE
finally
ctxRtti.Free;
end;
end;
Ricardo Matarazzo
Curtidas 0