Передать в скрипт объект, содержащий динамический массив
published
…
property Names: TNamesArray read FNames write FNames;
…
, где ТNamesArray представляет собой тип:
TNamesArray = array of WideString; - т. е. динамический массив.
В Delphi делаю так:
var
DDObj: TDataObj;
begin
…
DDObj := TDataObj.Create(Self);
…
// Заполнение массива значениями из другого массива - NamesArr
DDObj.Names:=GetDataFomArr(NamesArr);
…
fsScript.CallFunction('Proc1', VarArrayOf([Integer(DDObj)]));
FreeAndNil(DDObj);
end;
Процедура Proc1 описана в скрипте так:
procedure Proc1(DObj: TDataObj);
begin
ShowMessage(Dobj.Names[0]);
end;
При запуске скрипта возникает ошибка ‘Array type required’. Класс TDataObj и тип TNamesArray добавлены в скрипт как показано ниже:
fsGlobalUnit.AddType('TNamesArray', fvtArray);
fsGlobalUnit.AddClass(TDataObj, 'TComponent');
Очень надеюсь на помощь.
Комментарии
пытаюсь передать в fastscript объект, созданный в основном коде:
var Obj: Variant;
Obj:=CreateOleObject('Excel.Application');
возможно ли вообще его передать в fastscript для работы с ним?
Script.AddVariable('MyScriptObj', 'Variant', Obj)
А если надо передать переменную типа какого то класса, то делаем так:
Script.AddVariable('oMyClass', 'TMyClass', Integer(oMyClass))
В принципе это все есть в описании FS и это же можно посмотреть в исходниках самого FS и FR.
Obj := CreateOleObject('Excel.Application');
fsScript1.AddVariable('Obj','Variant',Obj);
дает ошибку Unknown type: 'Variant'