クラスをparamとして受け取るDWScriptプロシージャをdelphiから呼び出すにはどうすればよいですか?
元:
DWScript側:
procedure Proc1(AParam: TObject);
begin
// do something useful
end;
Delphi側:
var
Obj: TObject;
Exec.Invoke('Proc1', [obj]);
Delphi 側のオブジェクトをスクリプト側のオブジェクトにラップし、必要に応じて作成する必要があります。
露出については、TdwsUnit を使用して手動で公開するか(これにより、スクリプトの誤操作から Delphi 側のクラスを保護できます)、または RTTI 露出を使用できます(ただし、その場合、スクリプト側のバグは、したがって、ホストがクラッシュする可能性があるため、クラスがすでに安全であることがわかっている場合、またはサンドボックス化を気にしない場合にのみ、RTTI を使用してください)。
単純な露出だけが必要な場合のより簡単なアプローチは、RTTI 環境 (URTTIExposeTests の TRTTIExposeTests.EnvironmentTest を参照) を使用することですが、RTTI と安全性/サンドボックス化に関する上記の注意事項に留意してください。
より複雑なアプローチは、次のようなコードでスクリプト側のオブジェクトを作成することです
scriptObj := Info.Vars['TScriptSideClassName'].Method['Create'].Call([param1, param2]);
次に、ExternalObject プロパティを手動で調整します。
また、スクリプト側のオブジェクトを 1 回だけ作成すること (スクリプト側のオブジェクトの比較を通常どおりに行う場合)、およびクリーンアップ (つまり、スクリプトの実行中に Delphi 側のオブジェクトが解放された場合に何が起こるか) について心配する必要がある場合もあります。または、スクリプト側のオブジェクトが解放されたときに Delphi 側のオブジェクトを解放する責任を負うべき人)、およびその他の微妙な点 (Delphi が何らかの形式の自動化されたメモリ管理を取得すると、より簡単になります)。