Одна особенность FastScript + Delphi

в 3:10, , рубрики: Delphi, ошибка, Программирование, метки: ,

При разработке одного небольшого проекта на Delphi с использованием FastScript, столкнулись с одной неочевидной особенностью.
Надеюсь, кому-то найденная особенность будет полезной и сэкономит время разработки.

В проекте использовался ZeosLib, и для создания дополнительной прослойки была написана следующая конструкция:

type
  TMyQuery = TZQuery;

То есть тип TMyQuery объявлялся как синоним TZQuery и далее в программе создавались объекты именно этого типа.
Все шло хорошо, пока мы не стали привязывать к проекту FastScript для выноса части функционала в блоки, которые можно было (и нужно было) менять без перекомпиляции проекта.

Внутри скриптов подразумевалось использование запросов к БД.
Поэтому мы, в соответствие с документацией, при инициализации движка скрипта добавили в него наш класс:

TFunctions = class(TfsRTTIModule)
  private
    ...
  public
    constructor Create(AScript: TfsScript); override;
  end;

constructor TFunctions.Create(AScript: TfsScript);
begin
  inherited Create(AScript);
  with AScript do
  begin
    ...
   
    AddClass(TMyQuery ,'TDataSet');
    
     ...
  end;
end;

На что при попытке объявить внутри скрипта переменную нашего типа получали сообщение:

Были обнаружены следующие ошибки: Ошибка в скрипте 10:4: Неизвестный тип: 'TMyQuery'

При этом, импортированные в скрипт другие классы преспокойненько работали. Да и на самой строке:

   AddClass(TMyQuery ,'TDataSet'); 

ни во время компиляции, ни во время выполнения никаких ошибок и предупреждений не было.
В результате пары часов поиска проблемы выяснилось, что FastScript просто не может корректно импортировать классы, которые описаны как синоним другого класса.

После смены описания типа на:

type
  TMyQuery = class(TZQuery);

(то есть TMyQuery теперь не синоним, а наследник TZQuery)
все встало на свои места.

Версия ПО: Delphi 2010, FastScript 4. В других версиях и сочетаниях не проверялось.

Автор: TemaAE

Источник

  1. neon:

    Библиотека FastScript действительно является очень мощным инструментом.

    FastScript предоставляет (в том числе) возможность:

    – адаптации библиотеки для своих проектов БЕЗ изменения кода самой библиотеки FastScript (добавление своих собственных функций, процедур и констант);

    – локализации (на уровне скриптов) идентификаторов программных объектов (функций, процедур, переменных и констант), что безусловно является одним из факторов, существенно «облегчающих жизнь» конечному Пользователю (ибо не профи-программисту легче оперировать идентификаторами типа “Скорость_света”, чем “Speed_of_light”).

    См., например, здесь: “О применении библиотеки FastScript в своих проектах. Часть-1 «Расширение функционала»”.
    https://roamer55.ru/main_programming/delphi/delphi_12_vcl/FS_applying_FS_exp_func/

    Библиотека FastScript является просто незаменимой, когда необходимо сформировать гибкий программный инструментарий для автоматизации предметных областей без концептуального ограничения как на перечень «охватываемых» предметных областей, так и на градиент изменения условий функционирования программного инструментария в процессе его эксплуатации.

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js