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;
在我的 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;