PascalScript, включающий другой скрипт для каждого использования или включающий команду

#delphi #pascalscript

#delphi #pascalscript

Вопрос:

Я включил движок PascalScript в свое программное обеспечение. Теперь мой пользователь хочет написать целый набор скриптов для этого движка и хотел бы знать, возможно ли включить другие скрипты с помощью команды include or uses .

Что он хочет сделать, так это написать один скрипт, который содержит все виды констант / переменных, и другой, который выполняет логику. В конце он хочет включить константы в свой логический скрипт.

Я надеюсь, что это было достаточно ясно для понимания.

Комментарии:

1. JVCL JvInterpreter позволяет вам использовать другие модули и может считывать их из файлов, попробуйте вместо этого, если это лучше соответствует вашим потребностям.

2. Спасибо за вашу подсказку, Уоррен. Я нашел решение для скрипта pascal, см. Ниже

Ответ №1:

Я выяснил, вот как с этим поступить: свойству UsePreprocessor компилятора PascalScript необходимо присвоить значение true. Если это так, теперь вы можете использовать следующую команду препроцессора:

{$I filename.txt }

Также вам необходимо реализовать событие OnNeedFile компилятора чем-то вроде следующего примера, который я нашел в сети:

 function TForm1.ceNeedFile(Sender: TObject; const OrginFileName: String;
var FileName, Output: String): Boolean;
var
  path: string;
  f: TFileStream;
begin
  Path := ExtractFilePath(ParamStr(0))   FileName;
  try
    F := TFileStream.Create(Path, fmOpenRead or fmShareDenyWrite);
  except
    Result := false;
    exit;
  end;
  try
    SetLength(Output, f.Size);
    f.Read(Output[1], Length(Output));
  finally
    f.Free;
  end;
  Result := True;
end;
  

Ответ №2:

(Пожалуйста, исправьте заголовок вашего вопроса)

Я не совсем уверен, но afaik Pascalscript не имеет понятия «файл». Вы могли бы просто объединить обе части перед передачей их интерпретатору, или заставить небольшой препроцессор искать инструкции {$ I } include и искать код для вставки.

Ответ №3:

Если вы установите для условного определения значение PS_USESSUPPORT и в OnFindUnknownFile случае вам придется загружать содержимое pas-файла в выходную строку.

Затем вы можете использовать «Использует XYZ;».