首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

Invoke 类型转换异常

2012-02-06 
Invoke 类型转换错误Delphi(Pascal) codeunit Unit3interfaceusesWindows, Messages, SysUtils, Variants

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

热点排行