DWScript:从Delphi函数公开并返回一个对象到脚本?

时间:2015-11-14 17:27:30

标签: delphi dwscript

在我的Delphi(2010)代码中,我有一个类TImageItem,我已经通过以下方式暴露给DWScript:

dwsUnit.ExposeRTTI(TypeInfo(TImageItem),[eoNoFreeOnCleanup, eoExposePublic]);

在dwsUnit中,我已经声明了一个从Delphi端获取TImageItem的函数:

function GetImage: TImageItem;

在Delphi方面:

procedure TFScript.dwsUnitFunctionsGetImageEval(info: TProgramInfo);
begin
    ...
    // (Item is a TImageItem and not nil)
    Info.ResultAsVariant := TdwsRTTIVariant.FromObject(Item);
end;

然而,当我运行一个脚本开始时:

var Item: TImageItem;
Item := GetImage;
...

我在GetImage调用期间收到一条EScriptError消息"对象已被销毁"。

我做错了什么?我是暴露对象还是错误地返回它?

1 个答案:

答案 0 :(得分:1)

我不知道ExposeRTTI,因为我从未使用它,但我会这样做:

procedure TFScript.dwsUnitFunctionsGetImageEval(info: TProgramInfo);
begin
  ...
  // (Item is a TImageItem and not nil)
  Info.ResultAsVariant := Info.Vars[Info.ResultVars.TypeSym.Name].GetConstructor('Create', Item).Call.Value;
end;