DWScript: предоставление и возврат объекта в скрипт из функции Delphi?

В моем коде Delphi (2010) у меня есть класс TImageItem, который я открыл для DWScript через:

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

В dwsUnit я объявил функцию для получения TImageItem со стороны Delphi:

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;
...

Я получаю EScriptError во время вызова GetImage с сообщением «Объект уже уничтожен».

Что я делаю неправильно? Я выставляю объект или возвращаю его неправильно?


person hukka    schedule 14.11.2015    source источник


Ответы (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;
person SpeedFreak    schedule 14.11.2015