JvInterpreterでDelphi/C++Builderアプリケーションに簡易Pascal言語を組み込む(2)

JvInterpreterにPlus関数を組み込むには、GlobalJvInterpreterAdapterでTJvInterpreterAdapterを取得して、AddFunctionメソッドで登録します。
実行する関数はTJvInterpreterAdapterGetValue型になります。

###JvInterpreterに関数を組み込む

JvInterpreterにPlus関数を組み込みます。

JvInterpreterProgram1のPasプロパティに実行するコードを設定します。

unit Unit1;

function Main: Integer;
begin
  Result := Plus(10, 20);
end;

end.

関数を組み込むには、GlobalJvInterpreterAdapterでTJvInterpreterAdapterを取得して、AddFunctionメソッドで登録します。

GlobalJvInterpreterAdapter.AddFunction(
    'Unit1', //ユニット名
    'Plus',  //関数名
    Form1Plus, //実行する関数
    2,  //関数の引数の数
    [varInteger, varInteger], //引数の型
    varInteger //返値の型
);

実行する関数はTJvInterpreterAdapterGetValue型になります。
引数Argsには関数の引数が設定されます。
引数Valueには関数の返値を設定します。

procedure Form1Plus(var Value: Variant; Args: TJvInterpreterArgs);
begin
  Value := Args.Values[0] + Args.Values[1];
end;

ボタンを押したときに登録したコードを実行します。

procedure TForm1.Button1Click(Sender: TObject);
var
  I: Integer;
begin
  //Plus関数を組み込む
  GlobalJvInterpreterAdapter.AddFunction('Unit1', 'Plus', Form1Plus, 2, [varInteger, varInteger], varInteger);
  I := JvInterpreterProgram1.CallFunction('Main', nil, []);
  Memo1.Text := IntToStr(I);
end;

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください