DWScript:从 Delphi 函数向脚本公开和返回对象?

DWScript: exposing and returning an object to script from Delphi function?

在我的 Delphi (2010) 代码中,我有一个 class 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 消息 "Object already destroyed"。

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

我不知道 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;