2

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でコンパイルされませんでした)。任意の提案をいただければ幸いです。

4

0 に答える 0