Как лучше всего выставить экземпляр класса в DWScript - PullRequest
6 голосов
/ 25 августа 2011

Я собираю встроенную возможность сценария, используя превосходный Pascal DWScript . Я также добавил свое собственное определение класса на стороне Delphi (TDemo) в DWScript, используя:

dwsUnit.ExposeRTTI( TDemo.ClassInfo  )

Это просто работает и является отличным способом быстрого добавления свойств и методов.

Я также хочу добавить существующий экземпляр аналогичным образом, поэтому я создал свой экземпляр FDemo типа TDemo и затем выполнил:

   dwsUnit.ExposeInstanceToUnit( 'Demo', 'TDemo', FDemo );

Это выглядит многообещающей процедурой для вызова, но я получаю AV из неинициализированной таблицы единиц измерения. Я также заглянул в код модульного теста источника SVN, чтобы увидеть использование этой функции, но безрезультатно. Может кто-нибудь указать мне, что я должен добавить / изменить?

1 Ответ

4 голосов
/ 26 августа 2011

ExposeInstanceToUnit должен использоваться из инициализации таблицы TdwsUnit, см. RTTIExposeTests / ExposeInstancesAfterInitTable для некоторого примера кода.Он позволяет напрямую отображать динамические экземпляры.

Другой подход заключается в использовании коллекции Instances компонента TdwsUnit, вы получаете поддержку во время разработки и дополнительные средства управления своими экземплярами и их временем жизни.

Также имейте в виду, что вы должны убедиться, что представленные вами экземпляры будут работать должным образом, даже если скрипт плохо себя ведет, например, когда пользователь пытается вручную уничтожить представленный вами экземпляр, и этот экземпляр не должен быть уничтожен.По умолчанию ExposeRTTI будет отображать деструкторы, поэтому вы можете захотеть ограничить это, указав eoNoFreeOnCleanup.

edit: последний недавно добавленный подход заключается в использовании TdwsRttiConnector, который в основном позволяет открывать и подключаться ко всему, что доступно через RTTI,Это очень легко с точки зрения кода для установки, но недостатком является то, что вы не получаете никакой формы проверок во время компиляции.

...