Одна особенность FastScript + 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. В других версиях и сочетаниях не проверялось.

ссылка на оригинал статьи http://habrahabr.ru/post/179989/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *