Invoke 类型转换错误
unit Unit3;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm3 = class(TForm) mo1: TMemo; btn1: TButton; btn2: TButton; btn3: TButton; btn4: TButton; procedure btn1Click(Sender: TObject); procedure btn2Click(Sender: TObject); procedure btn3Click(Sender: TObject); procedure btn4Click(Sender: TObject); private { Private declarations } public procedure say(str: string); end;var Form3: TForm3;implementation{$R *.dfm}uses Rtti;procedure TForm3.btn1Click(Sender: TObject);var ctx: TRttiContext; t: TRttiType;begin mo1.Clear; for t in ctx.GetTypes do mo1.Lines.Add(t.Name);end;procedure TForm3.btn2Click(Sender: TObject);var ctx: TRttiContext; t: TRttiType; m: TRttiMethod;begin mo1.Clear; t := ctx.GetType(TForm3); for m in t.GetMethods do mo1.Lines.Add(m.Name);end;procedure TForm3.btn3Click(Sender: TObject);var ctx: TRttiContext; t: TRttiType; f: TRttiField;begin mo1.Clear; t := ctx.GetType(TButton); for f in t.GetFields do mo1.Lines.Add(f.Name);end;procedure TForm3.btn4Click(Sender: TObject);var ctx: TRttiContext; t: TRttiType; m: TRttiMethod; V: TValue;begin t := ctx.GetType(TForm3); m := t.GetMethod('say'); V := TValue.From<string>('123'); m.Invoke(TForm3, V);//此处报错Invalid class typecast.end;procedure TForm3.say(str: string);begin mo1.Clear; mo1.Lines.Add(str);end;