1

在我的 Delphi (2010) 代码中,我有一个 TImageItem 类,我通过以下方式向 DWScript 公开了它:

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

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

function GetImage: TImageItem;

在德尔福方面:

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 消息“对象已销毁”。

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

4

1 回答 1

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;
于 2015-11-14T19:25:57.133 回答