整数の足し算を行う例です。以下ソース
- unit Unit1;
- interface
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, StdCtrls, ExtCtrls;
- type
- TForm1 = class(TForm)
- Button3: TButton;
- LabeledEdita: TLabeledEdit;
- Label1: TLabel;
- LabeledEditb: TLabeledEdit;
- Label2: TLabel;
- LabelResult: TLabel;
- procedure Button3Click(Sender: TObject);
- private
- { Private 宣言 }
- protected
- public
- { Public 宣言 }
- function Sakasum(a,b : Integer) : Integer;
- end;
- var
- Form1: TForm1;
- implementation
- uses
- Rtti,TypInfo;
- {$R *.dfm}
- procedure TForm1.Button3Click(Sender: TObject);
- var
- ctx : TRttiContext;
- rtm : TRttiMethod;
- Args : Array of Rtti.TValue;
- rst : TValue;
- begin
- //
- ctx := TRttiContext.Create;
- rtm := ctx.GetType(Self.ClassType).GetMethod('SakaSum');
- if rtm <> nil then
- begin
- SetLength(Args,2);
- //TValueは、演算子Implicitが定義されているので基本的な型は
- //変換による代入が可能
- Args[0] := StrToInt(LabeledEdita.Text);
- Args[1] := StrToInt(LabeledEditb.Text);
- rst := rtm.Invoke(Self,Args);
- //結果はAsXXXXX関数を使って取り出せる。
- Self.LabelResult.Caption := IntToStr(rst.AsInteger);
- end;
- end;
- function TForm1.Sakasum(a, b: Integer): Integer;
- begin
- Result := a + b;
- end;
- end.
TValueの使い方が分からなくて結構悩みました。
で、ソースをみたら基本的な型については、
Implicit演算子のオーバーロードが
定義されているのね。
このへんはHelpに書いといて欲しかったです。
(C++ のHELPには書いてあります。)
(英語版のDoc Wikiがメンテナンス中だったので
日本語版でのみ書いていないのかはちょっと不明です。)
また、こちらにDelphi Prismで上記と同様な処理を
記述しました。
0 件のコメント:
コメントを投稿