Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Скриптовый язык 
:(
    Опции темы
kami
Дата 7.10.2013, 22:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 23
Всего: 72



Цитата(klyaksa @  7.10.2013,  15:46 Найти цитируемый пост)
Тем более так, как я понял, можно связать уже имеющиеся переменные с переменными в скрипте. Но это не вариант, т.к. они могут быть любые.

мда... не дочитал.
А, собственно, как это - любые? То есть - программа говорит скрипту "на тебе что-то, сама не знаю что", а скрипт, совершенно не представляя, что же ему отдали, должен с этим что-то сделать нечто эдакое, да еще и вернуть другой набор чего-то, о чем в свою очередь программа не догадывается и -соответственно - не сможет использовать?
PM MAIL WWW   Вверх
klyaksa
Дата 8.10.2013, 08:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 187
Регистрация: 15.9.2005

Репутация: нет
Всего: нет



Цитата(kami @  7.10.2013,  22:23 Найти цитируемый пост)
А, собственно, как это - любые? То есть - программа говорит скрипту "на тебе что-то, сама не знаю что", а скрипт, совершенно не представляя, что же ему отдали, должен с этим что-то сделать нечто эдакое, да еще и вернуть другой набор чего-то, о чем в свою очередь программа не догадывается и -соответственно - не сможет использовать? 

Например, дан скрипт (любой). Мы его текст пропарсили и получили какие в нем есть переменные. Потом запустили и надо получить значения (конечные) этих переменных и, допустим, в мемо их вывели с = лялял, х = 10...

Добавлено через 4 минуты и 58 секунд
Вроде бы по описанию что нужно умеет FastScript, но пробник с оф. сайта работать не захотел.

---------------------------
Delphi XE: bds.exe - Системная ошибка
---------------------------
Запуск программы невозможен, так как на компьютере отсутствует Tee9150.bpl. Попробуйте переустановить программу. 
---------------------------
ОК   
---------------------------


[Window Title]
Error

[Content]
Can't load package C:\DelphiXE\Fast\LibD15\dclfstee15.bpl.
Не найден указанный модуль.
Do you want to attempt to load this package the next time a project is loaded?

[Yes] [No]
PM MAIL   Вверх
kami
Дата 8.10.2013, 09:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 23
Всего: 72



Цитата(klyaksa @  8.10.2013,  08:24 Найти цитируемый пост)
Потом запустили и надо получить значения (конечные) этих переменных и, допустим, в мемо их вывели с = лялял, х = 10...

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

Добавлено через 54 секунды
То есть, получается - при запуске скрипта передали ему экземпляр мемо, а он пишет туда что хочет.
PM MAIL WWW   Вверх
klyaksa
Дата 8.10.2013, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 187
Регистрация: 15.9.2005

Репутация: нет
Всего: нет



Скрипт  пишет пользователь, ему не нужно заморачиваться с выводом переменных.
Только если самому добавлять строки в скрипт, но это как-то не очень. Хотя на крайний случай как вариант.
PM MAIL   Вверх
klyaksa
Дата 8.10.2013, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 187
Регистрация: 15.9.2005

Репутация: нет
Всего: нет



kami,  а как в RemObjects Samples\Pascal Script for Delphi\TestApp подключить memo...? Добавляю плагины импорта на компиляции скрипта Project TestApplication.exe raised exception class EPSCompilerException with message 'Unable to register type TDrawItemEvent'.
Т.е. как в Import\fMain.pas, только с PSScript.

Вроде разобрался, в проекте с нуля заработало.

Это сообщение отредактировал(а) klyaksa - 8.10.2013, 12:49
PM MAIL   Вверх
klyaksa
Дата 8.10.2013, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 187
Регистрация: 15.9.2005

Репутация: нет
Всего: нет



Кстати, где можно глянуть что понимает RemObjects Pascal Script.
Можно ли как сразу инициализировать массивы?
SysUtils можно подцепить или каждую надо отдельно и импортировать?

Это сообщение отредактировал(а) klyaksa - 8.10.2013, 13:34
PM MAIL   Вверх
CynicRus
Дата 8.10.2013, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 248
Регистрация: 31.5.2012

Репутация: нет
Всего: 5



Цитата(klyaksa @ 8.10.2013,  12:56)
Кстати, где можно глянуть что понимает RemObjects Pascal Script.
Можно ли как сразу инициализировать массивы?
SysUtils можно подцепить или каждую надо отдельно и импортировать?

Там очень много чего можно. К сожалению документация унылая, и потому приходится курить исходники.  Можно, например

TSA:=['string','anotherstring'] и т.д. В самом скрипте. Что понимает PascalScript - тебе нужен модуль uPSCompiler. Открываешь его и смотришь, чего он понимает. За счёт того, что приходится втыкать самому в код, реализация чего либо дополнительного в PS проблематична, но возможна. Вот например реализация метода перевода любой зарегистрированной PS переменной в строку:

Код


function MakeString(data : TPSVariantIFC) : string;
begin;
  if data.Dta = nil then
    result := 'Nil'
  else
  if data.aType.basetype in [btString,btChar] then
    result := PSGetAnsiString(Data.Dta,data.aType)
  else if data.aType.ExportName = 'BOOLEAN' then
    result := BoolToStr(PSGetInt(Data.Dta,data.aType) <> 0,true)
  else if data.aType.BaseType in [btExtended,btSingle,btDouble] then
    result := FloatToStr(PSGetReal(data.Dta,data.aType))
  else
    result := PSVariantToString(data,'');
end;

function ToStr_(Caller: TPSExec; p: TPSExternalProcRec; Global, Stack: TPSStack): Boolean;
begin
  result := true;
  Stack.SetAnsiString(-1, MakeString(NewTPSVariantIFC(Stack[Stack.Count-2],false)));
end;



А вот реалиация Swap для 2 переменных:

Код

function swap_(Caller: TPSExec; p: TPSExternalProcRec; Global, Stack: TPSStack): Boolean;
var
  Param1,Param2: TPSVariantIFC;
  tempCopy : pointer;
begin
  Result:=true;
  Param1 := NewTPSVariantIFC(Stack[Stack.count-1],true);
  Param2 := NewTPSVariantIFC(Stack[Stack.count-2],true);
  if Param1.aType.BaseType <> Param2.aType.BaseType then
    exit(false)
  else
  begin
    Param1.aType.CalcSize;
    param2.aType.CalcSize;
    if Param1.aType.RealSize <> Param2.aType.RealSize then
      exit(false);
    GetMem(tempcopy,Param1.aType.RealSize);
    Move(Param1.Dta^,tempCopy^,param1.atype.realsize);
    Move(Param2.Dta^,Param1.Dta^,param1.atype.realsize);
    Move(tempCopy^,Param2.Dta^,param1.atype.realsize);
    Freemem(tempcopy);
  end;
end;


Это сообщение отредактировал(а) CynicRus - 8.10.2013, 17:00
PM MAIL   Вверх
kami
Дата 9.10.2013, 08:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 23
Всего: 72



Цитата(klyaksa @  8.10.2013,  12:56 Найти цитируемый пост)
Можно ли как сразу инициализировать массивы?

Я пробовал - константой объявить в скрипте не смог :( . А так хотелось...

Цитата(klyaksa @  8.10.2013,  12:56 Найти цитируемый пост)
SysUtils можно подцепить или каждую надо отдельно и импортировать?

Емнип, SysUtils подцепляется автоматом. По крайней мере я не задумывался над тем, что из плагинов нужно для (к примеру) StrToInt.
А вообще - да, с документацией немножко плоховасто. Но для не слишком крутых задач имеющихся примеров хватает. Если что-то нужно - открываем uPSC_xxxxxxx.pas и смотрим, что PSScript узнает, подключив плагин.

Сейчас ради интереса попробовал - в TestApp в скрипте можно написать
Код

 Memo2.Lines.Add('asretq349501924uftesdfa');
. Зачем там добавили вывод через MyWriteln - разве что для примера импорта функции... 
PM MAIL WWW   Вверх
CynicRus
Дата 9.10.2013, 08:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 248
Регистрация: 31.5.2012

Репутация: нет
Всего: 5



О, вчера забыл - а добавляется приведённый мной код в PS примерно вот так:
Код

procedure TPSThread.OnCompImport(Sender: TObject; x: TPSPascalCompiler);

***


  with x.AddFunction('function ToStr:string').Decl.AddParam do
  begin
    OrgName := 'x';
    Mode := pmIn;
  end;

  with x.AddFunction('procedure swap;').Decl do
  begin
    with AddParam do
    begin
      OrgName := 'x';
      Mode := pmInOut;
    end;

    with AddParam do
    begin
      OrgName := 'y';
      Mode := pmInOut;
    end;
  end;




PM MAIL   Вверх
klyaksa
Дата 9.10.2013, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 187
Регистрация: 15.9.2005

Репутация: нет
Всего: нет



Из SysUtils не все работает. Например, не все функции преобразования флоат в строку.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0849 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.