DWS スクリプトを実行する Delphi アプリケーションがあります。Delphi アプリケーションは、「MyApplication」と呼ぶオブジェクト インスタンスをスクリプトに公開します。公開されたオブジェクトには、プロシージャである 1 つの引数を持つメソッドがあります。
基本的な目標は、Delphi メソッドで何らかの計算を実行し、コールバック プロシージャが完了したときにこの計算を停止することです。コールバック手順はスクリプト内にあります。
コールバック関数の名前を文字列として渡すことでこれを実装しました。スクリプトのコンパイル時に型チェックが行われないことを除けば、うまく機能します。スクリプト コンパイラがコンパイル時にエラーをキャッチできるように、実際のプロシージャを渡したいと思います。
どうやってするか?
読者が私の言いたいことを理解するのを助けるために、いくつかの - 動かない - コードを示します:
まず、Delphi 側の単純化されたバージョン:
Interface
type
TAppCheckProc = procedure (var Done : Boolean);
TMyApplication = class(TPersistent)
published
procedure Demo(CheckProc : TAppCheckProc);
end;
Implementation
TMyApplication.Demo(CheckProc : TAppCheckProc);
var
Done : Boolean;
begin
Done := FALSE;
while not Done do begin
// Some more code here...
CheckProc(Done);
end;
end;
第二に、スクリプト側ではこれがあります(これも簡略化されています):
procedure CheckProc(
var Done : Boolean);
var
Value : Integer;
begin
DigitalIO.DataIn(1, Value);
Done := (Value and 8) = 0;
end;
procedure Test;
begin
MyApplication.Demo(CheckProc);
end;
Demo メソッドの引数を別の方法で宣言し、別の方法で呼び出す必要がある可能性があります。それが質問です...
編集: 余分な Tag 引数を削除しました (コードを単純化したときのエラー、これは問題ではありません)。