读书人

Invoke 类型转换异常

发布时间: 2012-02-06 15:52:45 作者: rapoo

Invoke 类型转换错误

Delphi(Pascal) code
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;


[解决办法]
是Form3不是TForm3,你得注意一下动态数组的下标是从0开始的不是1

读书人网 >.NET

热点推荐