dwscript で TStringList を使用する必要があります。
コンパイルされた Delphi コードでは、両方を使用します
sl := TStringList.Create;
と
sl := genSL;
ここで、genSL は TStringList を作成して入力します。
これを dwscript で使用したいのですが、genSL から TStringList を返すのに問題があります。
どうやら2つのアプローチがあるようです。
1 RTTI を使用
デルファイで私は書く
dwsUnit1.Dependencies.Add(RTTI_UnitName);
dwsUnit1.Functions.Add('genSL', 'RTTIVariant');
そしてコールバックで
procedure TMainForm.genSLEval(info: TProgramInfo);
var
sl: TStringList;
begin
sl := TStringList.Create;
// populate sl
Info.ResultAsVariant := TdwsRTTIVariant.FromObject(sl);
end;
これにより、外部で作成された TStringList をスクリプトに渡すことができます。
問題:スクリプトで、リストを RTTIVariant として宣言する必要があります。
実際には TStringList であるため、これは誤解を招きます (また、既存のコードを変更せずに使用したいと考えています)。スクリプトで List を TStringList として宣言することをお勧めします。
2 TStringList を dwsUnit に公開する
デルファイで私は書く
dwsUnit1.ExposeClassToUnit(TPersistent, TObject);
dwsUnit1.ExposeClassToUnit(TStrings, TPersistent);
dwsUnit1.ExposeClassToUnit(TStringList, TStrings);
スクリプトでは、TStringList を作成して使用できます。
しかし、TStringList-y を返す魔法の関数を宣言することはできません。
デルファイ コード:
dwsUnit1.Functions.Add('genSL', 'TStringList');
およびスクリプトコード:
var sl: TStringList;
sl := genSL;
問題:これにより、スクリプトのコンパイルがSyntax Error: Incompatible types: Cannot assign "TStringList" to "TStringList"で中止されます
私は何かが欠けていると思います。どちらにも必要なもの
- オブジェクトを RTTIVariant 以外のものとして宣言して、オブジェクトをそれに渡します
また
- スクリプトに渡せるように型を導入しますか?
私は2013年7月にチェックアウトされたdwscript-svnでDelphi 2010を使用しています(最近のsvnはd2010でコンパイルされませんでした)。任意の提案をいただければ幸いです。