- unit Unit1;
- interface
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, ObjAuto, StdCtrls;
- type
- {$MethodInfo ON}
- TTestCall = class(TPersistent)
- public
- function Add(X,Y: integer): integer;
- procedure Msg(s: string);
- end;
- {$MethodInfo OFF}
- TForm1 = class(TForm)
- Button1: TButton;
- Button2: TButton;
- procedure FormCreate(Sender: TObject);
- procedure Button1Click(Sender: TObject);
- procedure Button2Click(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
- var
- Form1: TForm1;
- implementation
- {$R *.dfm}
- procedure TForm1.Button1Click(Sender: TObject);
- var
- tc:TTestCall;
- mih: PMethodInfoHeader;
- res:integer;
- begin
- tc := TTestCall.Create;
- mih := Objauto.GetMethodInfo(tc,'Msg');
- ObjAuto.ObjectInvoke(tc, mih, [1], ['orz...']);
- tc.Free;
- end;
- procedure TForm1.Button2Click(Sender: TObject);
- var
- tc:TTestCall;
- mih: PMethodInfoHeader;
- res:integer;
- begin
- tc := TTestCall.Create;
- mih := Objauto.GetMethodInfo(tc,'Add');
- res:=ObjAuto.ObjectInvoke(tc, mih, [1,2], [10,20]);
- ShowMessage(Inttostr(res));
- tc.Free;
- end;
- procedure TForm1.FormCreate(Sender: TObject);
- begin
- end;
- { TTestCall }
- function TTestCall.Add(X, Y: integer): integer;
- begin
- result := X+Y;
- end;
- procedure TTestCall.Msg(s: string);
- begin
- ShowMessage(s);
- end;
- end.
利用反射机制动态调用方法
最新推荐文章于 2021-02-13 16:32:08 发布