2015-11-14 1 views
1

В моем (2010) коде Delphi У меня есть класс TImageItem, который я подверженный DWScript через:DWScript: отображение и возврат объекта к скрипту из функции Delphi?

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 с сообщением «Объект уже уничтожен».

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

ответ

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; 
+0

Это прекрасно работает, спасибо! – hukka