Передать в скрипт объект, содержащий динамический массив

отредактировано 18:49 Раздел: FastScript
Здравствуйте! Помогите, пожалуйста, со следующей проблемой. Необходимо из скрипта вызвать процедуру, предварительно передав в неё из программы объект некоторого класса TDataObj, который содержит следующее свойство:
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');

Очень надеюсь на помощь.


Комментарии

  • отредактировано 18:49
    Понимаю, что выкрутиться здесь можно по-разному, например, используя TStrings. Но всё-таки, может найдётся решение и для варианта с массивом.
  • отредактировано 18:49
    схожая проблема.
    пытаюсь передать в fastscript объект, созданный в основном коде:

    var Obj: Variant;

    Obj:=CreateOleObject('Excel.Application');

    возможно ли вообще его передать в fastscript для работы с ним?
  • Stalker4Stalker4 123
    отредактировано 18:49
    uurka написал: »
    схожая проблема.
    пытаюсь передать в fastscript объект, созданный в основном коде:

    var Obj: Variant;

    Obj:=CreateOleObject('Excel.Application');

    возможно ли вообще его передать в fastscript для работы с ним?
    Передать можно так:
    Script.AddVariable('MyScriptObj', 'Variant', Obj)

    А если надо передать переменную типа какого то класса, то делаем так:

    Script.AddVariable('oMyClass', 'TMyClass', Integer(oMyClass))

    В принципе это все есть в описании FS и это же можно посмотреть в исходниках самого FS и FR.


  • отредактировано 18:49
    Stalker4 написал: »
    Передать можно так:
    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'

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.