関数の実行関数は次のように定義します。
TFunctionArgument = array of TVar;
procedure func(Args: TFunctionArgument; var return: TVar);
Args は引数の内容が入ります。
returnに関数の戻り値をセットします。
例:
// メッセージボックスを表示する
procedure MsgBox(Args: TFunctionArgument; var return: TVar);
var
text, title: string;
begin
text:=GetVarValue(Args[0], '');
title:=GetVarValue(Args[1], '');
Application.MessageBox(PChar(text), PChar(title), MB_ICONINFORMATION);
end;
まずグローバル関数として登録する方法を示します。
iduoConstsユニットの
Functionsという関数リストのメソッドを呼び出して登録します。
procedure EntryFunction(Name: string; ArgCount: integer; Proc: TFunctionProc);
Name: 関数の識別子
ArgCount: 引数の数
Proc: 実行時に呼び出す関数
例:
// 関数を定義する
Functions.EntryFunction('MsgBox', 2, MsgBox);
実行中スクリプト内だけで有効にしたい場合は、TIduo内にあるFuncsに登録してください。
実行したいスクリプトとは別に用意したスクリプト内に定義した関数を実行できるようにしたい場合は、次の関数を呼び出して行います。
procedure RegisterFunctions(code: widestring; funcs: TFunctions);
funcsに追加先の関数リストを指定し、codeに対象スクリプトを指定します。
例:
with TIduo.Create(nil) do
begin
RegisterFunctions(Memo1.Text, Funcs);
...
end;