4

クラスをparamとして受け取るDWScriptプロシージャをdelphiから呼び出すにはどうすればよいですか?

元:

DWScript側:

procedure Proc1(AParam: TObject);
begin
  // do something useful
end;

Delphi側:

var
  Obj: TObject;


Exec.Invoke('Proc1', [obj]);
4

1 に答える 1

1

Delphi 側のオブジェクトをスクリプト側のオブジェクトにラップし、必要に応じて作成する必要があります。

露出については、TdwsUnit を使用して手動で公開するか(これにより、スクリプトの誤操作から Delphi 側のクラスを保護できます)、または RTTI 露出を使用できます(ただし、その場合、スクリプト側のバグは、したがって、ホストがクラッシュする可能性があるため、クラスがすでに安全であることがわかっている場合、またはサンドボックス化を気にしない場合にのみ、RTTI を使用してください)。

単純な露出だけが必要な場合のより簡単なアプローチは、RTTI 環境 (URTTIExposeTests の TRTTIExposeTests.EnvironmentTest を参照) を使用することですが、RTTI と安全性/サンドボックス化に関する上記の注意事項に留意してください。

より複雑なアプローチは、次のようなコードでスクリプト側のオブジェクトを作成することです

scriptObj := Info.Vars['TScriptSideClassName'].Method['Create'].Call([param1, param2]);

次に、ExternalObject プロパティを手動で調整します。

また、スクリプト側のオブジェクトを 1 回だけ作成すること (スクリプト側のオブジェクトの比較を通常どおりに行う場合)、およびクリーンアップ (つまり、スクリプトの実行中に Delphi 側のオブジェクトが解放された場合に何が起こるか) について心配する必要がある場合もあります。または、スクリプト側のオブジェクトが解放されたときに Delphi 側のオブジェクトを解放する責任を負うべき人)、およびその他の微妙な点 (Delphi が何らかの形式の自動化されたメモリ管理を取得すると、より簡単になります)。

于 2012-06-04T06:16:53.580 に答える