Откомпилированный скрипт

отредактировано 16:09 Раздел: FastScript
У меня есть такая задача:
1. Я имею откомпилированный FastScript код, содержащий функцию function MyFunction(a:string):string
2. Но не имею исходных кодов этой функции

Вопрос:
Могу ли я написать скрипт, в котором я бы использовал функцию MyFunction?
Как это сделать?

Комментарии

  • отредактировано 16:09
    Смотрите в сторону методов SetILCode и CallFunction
  • отредактировано 16:09
    Сохранить код можно так:
    var 
    Stream:TMemoryStream;
    begin
    Stream := TMemoryStream.Create();
    fsScript1.Parent := fsGlobalUnit;
    fsScript1.Compile;
    fsScript1.GetILCode(Stream);
    Stream.SaveToFile('Script.fs');
    end;
    
    а загрузить так:
    Stream:TMemoryStream;
    begin
    Stream := TMemoryStream.Create();
    Stream.LoadFromFile('script.fs');
    Stream.Position := 0;
    fsScript1.Parent := fsGlobalUnit;
    fsScript1.SetILCode(Stream);
    fsScript1.CallFunction('MYFUNC',VarArrayOf(['hello']));
    end;
    
  • отредактировано 16:09
    написал:
    Сохранить код можно так:
    ....
    а загрузить так:
    ....
    Вопрос не в этом.

    Пример:

    У меня есть файлы:
    LibScript.fs - содержит функцию MyFunction
    MyScript.pas - содержит Uses LibScript и содержит вызов функции MyFunction и еще не откомпилирован.

    Как мне корректно откомпилировать MyScript.pas не имея исходных текстов LibScript , а имея только его откомпилированный код?

  • отредактировано 16:09
    Через uses никак ;) .
  • отредактировано 16:09
    написал:
    Через uses никак ;) .
    Ну тогда может не через uses. Каким-то образом я могу использовать уже откомпилированную библиотеку в новых скриптах?
  • отредактировано 16:09
    Да, способ есть ;)
    Передаем(регистрируем) в скрипт класс(или объект) Tfsscript, если передаем класс то, добавляем методы loadCompilefromFile(эту функцию определите в ручную) и callfunction.
  • отредактировано 16:09
    написал:
    Да, способ есть ;)
    Передаем(регистрируем) в скрипт класс(или объект) Tfsscript, если передаем класс то, добавляем методы loadCompilefromFile(эту функцию определите в ручную) и callfunction.
    Да ушшш. ;) Неужели нет способа поэстетичнее?
  • отредактировано 16:09
    Нет.
    У вас немного странная просьба зачем хранить подключаемый модуль в виде откомпилированного скрипта?
  • отредактировано 16:09
    написал:
    Нет.
    У вас немного странная просьба зачем хранить подключаемый модуль в виде откомпилированного скрипта?
    Смысл этой просьбы достаточно стандартный: разграничение уровня доступа к скриптам. Приложение (которое использует ядром FastScript) поставляется клиенту со скриптами, которые написал поставщик приложения и только он их может менять. Клиент может только писать свои скрипты, которые могут использовать библиотеки поставщика приложения. Поставщик, понятное дело, хочет обновлять свои библиотеки отдельно от exe-файла приложения. Фактически, если вы знакомы с Navision, то это нужно чтобы организовать аналогичное разграничение доступа к библиоткам: слой поставщика решения, поставщика адаптации для клиента, слой клиента.
  • отредактировано 16:09
    Сделайте одну функцию(как uses) которая будет подключать скрипт, реализовать такую функцию не сложно.
  • отредактировано 16:09
    Завтра могу выложить пример.
  • отредактировано 16:09
    написал:
    Завтра могу выложить пример.
    Буду страшно благодарен ;)

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

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