Передача объекта в PascalScript

Общие вопросы программирования, алгоритмы и т.п.

Модератор: Модераторы

Передача объекта в PascalScript

Сообщение krab22 » 30.03.2016 10:03:37

Добрый день господа!

Вопрос по PascalScript.
Подскажите можно ли (и если можно, то как) передать объект из приложения запускающего скрипт в выполняемый скрипт?
Именно имплементированный объект - не класс.

А массив объектов?

Заранее благодарен за ответ!
krab22
новенький
 
Сообщения: 17
Зарегистрирован: 24.01.2013 06:52:43

Re: Передача объекта в PascalScript

Сообщение CynicRus » 30.03.2016 10:11:08

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

например:

1) Добавляем тип:
Код: Выделить всё
AddTypeS('TTarget','record int1,int2,int3,int4,int5,int6,int7,int8,int9,int10,int11,int12,int13,int14,int15,int16:integer; end;');


2) Пишем враппер, возвращающий необходимый нам экземпляр:
Код: Выделить всё
function ps_GetTarget(): TTarget;extdecl;
begin
result := MyApp.GetMyTarget();
end;


3) Регистрируем этот враппер в скрипт:
Код: Выделить всё
AddFunction(@ps_GetTarget,'function GetTarget(): TTarget');


4) В скрипте:
Код: Выделить всё
var
t: TTarget;
begin
t:= GetTarget;
DoSomething();
end.

Proffit!
CynicRus
постоялец
 
Сообщения: 106
Зарегистрирован: 28.06.2012 14:31:11

Re: Передача объекта в PascalScript

Сообщение krab22 » 30.03.2016 11:14:03

CynicRus писал(а):1) Добавляем тип:
Код: Выделить всё
AddTypeS('TTarget','record int1,int2,int3,int4,int5,int6,int7,int8,int9,int10,int11,int12,int13,int14,int15,int16:integer; end;');

Proffit!

У вас передается рекорд?
А с объектами, например, типа TCollection и т.п. таким же образом действовать?

Добавлено спустя 1 минуту 10 секунд:
Тип вызова extdecl обязателен?
krab22
новенький
 
Сообщения: 17
Зарегистрирован: 24.01.2013 06:52:43

Re: Передача объекта в PascalScript

Сообщение CynicRus » 30.03.2016 12:12:19

krab22 писал(а):У вас передается рекорд?
А с объектами, например, типа TCollection и т.п. таким же образом действовать?

Добавлено спустя 1 минуту 10 секунд:
Тип вызова extdecl обязателен?


Да всё равно что передавать, хотите класс, хотите рекорд, хотите простой тип.

Код: Выделить всё
{$MACRO ON}
{$ifdef PS_SafeCall}
  {$define extdecl := safecall}
{$else}
  {$define extdecl := register}
{$endif}


вот мой extdecl, насчёт обязательности - я не уверен.
CynicRus
постоялец
 
Сообщения: 106
Зарегистрирован: 28.06.2012 14:31:11

Re: Передача объекта в PascalScript

Сообщение krab22 » 30.03.2016 12:39:19

Все, в общем то, понятно.
Просто смутила строчка:
Код: Выделить всё
'record int1,int2,int3,int4,int5,int6,int7,int8,int9,int10,int11,int12,int13,int14,int15,int16:integer; end;'

Типа объявление самого рекорда. Вот и спросил про класс.
Спасибо за ответы.
Где то дока вразумительная по данному чуду(PascalScript) есть? Не подскажите? Или научный тык рулит? :D
krab22
новенький
 
Сообщения: 17
Зарегистрирован: 24.01.2013 06:52:43

Re: Передача объекта в PascalScript

Сообщение CynicRus » 30.03.2016 13:01:53

krab22 писал(а):Все, в общем то, понятно.
Просто смутила строчка:
Код: Выделить всё
'record int1,int2,int3,int4,int5,int6,int7,int8,int9,int10,int11,int12,int13,int14,int15,int16:integer; end;'

Типа объявление самого рекорда. Вот и спросил про класс.
Спасибо за ответы.
Где то дока вразумительная по данному чуду(PascalScript) есть? Не подскажите? Или научный тык рулит? :D


Только ковыряние исходников оного, как таковой вменяемой документации я не встречал. До всего приходилось доходить самому, вдумчиво медитируя в тонны кода :D

PS: ну а начальное можно почерпнуть вот тут:
https://github.com/remobjects/pascalscript/wiki/Using-RemObjects-Pascal-Script
CynicRus
постоялец
 
Сообщения: 106
Зарегистрирован: 28.06.2012 14:31:11

Re: Передача объекта в PascalScript

Сообщение krab22 » 30.03.2016 13:48:42

Ок. Спасибо!
На GitHub я уже смотрел...

Добавлено спустя 21 час 45 минут 21 секунду:
Извините за назойливость.... :)
А нужно описывать интерфейс класса при его регистрации в PascalScript?
krab22
новенький
 
Сообщения: 17
Зарегистрирован: 24.01.2013 06:52:43

Re: Передача объекта в PascalScript

Сообщение CynicRus » 01.04.2016 09:57:56

krab22 писал(а):Ок. Спасибо!
На GitHub я уже смотрел...

Добавлено спустя 21 час 45 минут 21 секунду:
Извините за назойливость.... :)
А нужно описывать интерфейс класса при его регистрации в PascalScript?


Не совсем понял, что имеется ввиду. На всякий случай приведу пример регистрации класса:
1) Описываем класс
Код: Выделить всё
MyClass = class
public
Constructor Create;
procedure MyProcedure;
function MyFunction(): integer;
end;

2) Регистрируем в компиляторе
Код: Выделить всё
procedure SIRegister_MyClass(CL: TPSPascalCompiler);
begin
  with CL.AddClassN(CL.FindClass('TMyClass'),'TObject') do
  begin
    RegisterMethod('Constructor Create;');
    RegisterMethod('procedure MyProcedure;');
    RegisterMethod('Function MyFunction() : integer;');
  end;
end;


Ну а дальше по аналогии с предыдущим примером.
CynicRus
постоялец
 
Сообщения: 106
Зарегистрирован: 28.06.2012 14:31:11

Re: Передача объекта в PascalScript

Сообщение krab22 » 01.04.2016 11:36:47

таким образом
весь публичный интерфейс необходимо регистрировать - описывать

Если достаточно сложный класс надо зарегистрировать - достаточно большой гемор

А если метод или свойство возвращает другой объект/класс его(другой класс) перед этим тоже надо регистрить - беда!!!
И так всю иерархию?
krab22
новенький
 
Сообщения: 17
Зарегистрирован: 24.01.2013 06:52:43

Re: Передача объекта в PascalScript

Сообщение CynicRus » 01.04.2016 13:04:26

Ну...для этого есть утилита Unit Importer, чтобы руками не геморроиться. Но после неё всё равно придётся руками подправлять.
CynicRus
постоялец
 
Сообщения: 106
Зарегистрирован: 28.06.2012 14:31:11

Re: Передача объекта в PascalScript

Сообщение krab22 » 01.04.2016 13:13:38

Ну, на сей раз, наверное, окончательное спасибо! :D
krab22
новенький
 
Сообщения: 17
Зарегистрирован: 24.01.2013 06:52:43


Вернуться в Общее

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14

Рейтинг@Mail.ru