Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Интеграция DWScript и Внешних Класcов: Вызов Процедур из Классов Delphi

Delphi , Компоненты и Классы , RTTI

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

Проблема

Пользователь столкнулся с необходимостью вызова процедуры из класса, созданного в основном окне формы. Вопрос заключался в том, возможно ли это сделать, следуя примеру псевдокода:

type
  TDemo = class
    procedure test;
    constructor Create;
    destructor Destroy; override;
  end;

var
  Form28: TForm28;
  Demo:TDemo;

implementation

procedure TForm28.Button1Click(Sender: TObject);
var
  prog : IdwsProgram;
  exec : IdwsProgramExecution;
begin
  Demo := TDemo.Create;
  prog := DelphiWebScript1.Compile('Demo.Test;');
  exec := prog.Execute;
end;

Решение

Для того чтобы вызвать процедуру из класса, созданного в Delphi, на нем нужно сначала реализовать интерфейс с использованием компонента TdwsUnit. Это позволяет создать скриптовый модуль, который будет взаимодействовать с внешними функциями и процедурами.

// Допустим, мы используем компонент TdwsUnit для интерфейса с нашим объектом Demo.
procedure TForm28.Button1Click(Sender: TObject);
begin
  Demo := TDemo.Create;
  // Необходимо зарегистрировать объект Demo в TdwsUnit
  // Предположим, у нас есть метод TdwsUnit.RegisterClass для этого
  DelphiWebScript1.RegisterClass(Demo);
  // Затем можно выполнить скрипт, который будет использовать методы класса Demo
  DelphiWebScript1.Run('Demo.Test;');
end;

Обсуждение

Возникает вопрос: что делать, если в классе много методов? Необходимо ли добавлять их все вручную в интерфейс скриптового движка? Существует ли более простой способ общения с "внешним миром"? Нельзя ли это сделать через механизм RTTI (Runtime Type Information)?

На текущий момент для взаимодействия с классом со стороны скриптового движка действительно требуется ручная настройка. DWScript был разработан как самодостаточная система для создания веб-страниц, а не как слой автоматизации для полноценной кодовой базы.

Однако, существуют ограниченные возможности RTTI для экспорта и подключения через RTTI, которые позволяют получить доступ к классам Delphi через RTTI. Но большинство классов Delphi не считаются "безопасными" для использования в скриптах, так как легко можно вызвать сбой в работе хоста или утечку памяти.

Альтернативный способ — экспонирование классов как объекты OLE Automation, после чего можно использовать COM-соединитель DWScript для доступа к ним. Это имеет преимущество, что при экспонировании объектов автоматизации обычно проводится укрепление против утечек памяти и висячих указателей, и эти классы автоматизации будут доступны из других COM-средах.

Заключение

Для интеграции DWScript с внешними классами Delphi необходимо использовать компонент TdwsUnit для создания интерфейса между скриптовым движком и классами. Важно понимать ограничения, связанные с безопасностью и утечками памяти, а также рассматривать альтернативные подходы, такие как экспорт классов как OLE Automation объекты. С развитием технологий, в частности, с появлением ARC-компиляторов для Delphi, можно ожидать появления новых возможностей для более безопасной интеграции скриптовых движков с внешними классами.

Создано по материалам из источника по ссылке.

Интеграция скриптового движка DWScript с внешними классами Delphi и вызов процедур из этих классов.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




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


:: Главная :: RTTI ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-05 20:53:42/0.0032391548156738/0