Fórum RTTI - Invalid class typecast #533565
05/10/2015
0
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
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)