在我的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消息"对象已被销毁"。
我做错了什么?我是暴露对象还是错误地返回它?
答案 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;