我需要在dwscript中使用TStringList。
在编译的delphi代码中,我同时使用
sl := TStringList.Create;
和
sl := genSL;
genSL创建并打包TStringList。
我想在dwscript中使用它,但是我无法从genSL返回TStringList。
显然有两种方法。
在delphi中我写
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。
在delphi中我写
dwsUnit1.ExposeClassToUnit(TPersistent, TObject);
dwsUnit1.ExposeClassToUnit(TStrings, TPersistent);
dwsUnit1.ExposeClassToUnit(TStringList, TStrings);
在脚本中我可以创建并使用TStringList。
但是我不能声明一个返回TStringList-y
的魔术函数delphi代码:
dwsUnit1.Functions.Add('genSL', 'TStringList');
和scriptcode:
var sl: TStringList;
sl := genSL;
问题:这将使用中止脚本编译语法错误:不兼容的类型:无法将“TStringList”分配给“TStringList”
我认为我错过了一些东西。什么是必要的
或
我正在使用Delphi 2010并在2013-07中检查了dwscript-svn(最近的svn没有在2010年编译)。 任何建议都表示赞赏。