Как передать в скрипт переменные и объект

отредактировано 04:34 Раздел: FastScript
Документацию читал, сразу говорю. Но она у Вас слишком коротко написана. Уважаемые, без обид, но не все профи как Вы, тем более вы разработчики.
Я только только начинаю с этим разбираться и вопросов много, Думаю скажу от лица всех пользователей, что примеров маловато, жедательно добавить, причём посложнее, например тоже передача переменных в скрипт, массивов, объектов, новых типов...

Извините за лирическое отступление. Теперь вопрос.

переделал Ваш скрипт:
void OK(string s)
{
ShowMessage(s);
}

{
ar = IntToStr(iTest);

s = "";
s += ar;
OK(s);
}

И из вашего примера С++Demoы хочу в этот скрипт передать переменную.
В обработчике нажатия кнопки Run пишу так

int iTest = 10;
fsScript1->AddVariable("iTest", "Integer", &iTest);

при выполнении скрипта выдаёт ошибку, что переменная iTest не определена.

Как тогда её туда передать.

Вопрос ламерский, знаю, не ругайтесь, Please.
Большое спасибо.
Если можете (не жалко) киньте на мыло примерчики.
«1

Комментарии

  • отредактировано 04:34
    Попробуйте так:
    int iTest = 10;
    fsScript1->AddVariable("iTest", "Integer", iTest);
  • отредактировано 04:34
    В параметрах функции AddVariable передача переменной по ссылке. ТАк что не поможет.
  • отредактировано 04:34
    Sorry!
    Показалось что DELPHI а не BORLAND.
  • отредактировано 04:34
    Вы используете скрипт C++ тогда переменную надо обьявить как int:
    int iTest = 10;
    fsScript1->AddVariable("iTest", "int", &iTest);
  • отредактировано 04:34
    А нифига...
    У тебя примерчик какой-нить есть? Прислать можешь?
  • отредактировано 04:34
    Вот я ещё пример написал
    Подскажите что я не так делаю
    Написано в Builder 6.

    char mas[10];
    strcpy(mas, "Test");
    Script->Clear();
    Script->Parent = fsGlobalUnit();
    Script->AddVariable("Test", "Char", mas);
    Script->Lines->Text = "{ ShowMessage(mas); }";

    Script->SyntaxType = "C++Script";
    if(Script->Compile())
    Script->Execute();
    else
    MessageBox(NULL, Script->ErrorMsg.c_str(), "Îøèáêà", MB_OK);
  • отредактировано 04:34
    написал:
    В параметрах функции AddVariable передача переменной по ссылке. ТАк что не поможет.
    Вот именно, что по ссылке зачем ей передовать адрес (& - операция взятия адреса). Обращение происходит как к переменной.
    Для примера:
    void fn(int &ch)
    {
    ch*=ch;
    }
    ....
    ....
    int ch=10;
    fn(ch);//работает
    //fn(&ch) //неработает попытка передать адресс
    
    Конечно с Variant дело обстоит иначе.
    Я уже думал что схожу с ума(совсем меня запутали) ;)
    P.S.
    Говоря о примерах их можете взять Здесь.
  • отредактировано 04:34
    Хорошо, ну а что тогда неправильно в примере выше???
  • отредактировано 04:34
    А что вы делаете в срипте?
    Можете прислать примерчик?
    P.S.
    У вас мои примеры работают?
  • отредактировано 04:34
    char mas[10];
    strcpy(mas, "Test");
    Script->Clear();
    Script->Parent = fsGlobalUnit();
    Script->AddVariable("Test", "Char", mas);
    Script->Lines->Text = "{ ShowMessage(mas); }";

    Script->SyntaxType = "C++Script";
    if(Script->Compile())
    Script->Execute();
    else
    MessageBox(NULL, Script->ErrorMsg.c_str(), "Îøèáêà", MB_OK);

    Просто пытаюсь передать в скрипт массив и вывести его на экран. Дурь конечно... но это отработка передачи в скрипт переменных. Твои примеры сейчас посмоторю
  • отредактировано 04:34
    В примере вы обьявили указатель на массив символов, а в скрипте переменную типа char (char - в скрипте должен начинатся с маленькой буквы т.к в скриптах сохраняется весь синтаксис c++).
    Если хотите передать массив то попробуйте так
    Script->AddVariable("Test[10]", "сhar", mas);
  • отредактировано 04:34
    Всё с передачей в скрип переменной разобрался, теперь более сложная задачка - передать объект...
    И ещё вопрос а передать объект своего класса можно?
  • отредактировано 04:34
    написал:
    Всё с передачей в скрип переменной разобрался, теперь более сложная задачка - передать объект
    Пока передачу обьектов пробовал только в DELPHI, как только испробую в Buildere сразу выложу пример.
    написал:
    И ещё вопрос а передать объект своего класса можно?
    Если ваш класс зарегистрирован в скрипте.
  • отредактировано 04:34
    А пробывал зарегить его.
    Нефига не получается.ю ТАма походу дела можно только производные от TOblect! Или я ошибаюсь????
    Можно примеры и на делфи. Выкладывай
  • отредактировано 04:34
    Ок.
    Завтра выложу ;) .
  • отредактировано 04:34
    Спасибки

    Так что на счёт моего предположения относительно обязательности быть производным от TObject
  • отредактировано 04:34
    Интресно, как вы объявляете клас НЕ наследником TObject? ;)
  • отредактировано 04:34
    Интресно, как вы объявляете клас НЕ наследником TObject?

    ?????

    class MyClass
    {
    ....
    }

    А что здесь такого. Я Вас что-то не понял.
    Но только как объект такого класса передать в скрипт?!
  • отредактировано 04:34
    Любой класс - наследник TObject. Даже если явно не указанно.
  • отредактировано October 2005
    ну тогда простенький примерчик можешь дать?
  • отредактировано 04:34
    Самый простой можно взять здесь.
    P.S.
    Ещё рекомендую просмотреть вот этот топик:
    AddClass и AddObject, Проблемы при добавлении своего класса ;)
  • отредактировано 04:34
    ЛАдно,практический вопрос - как передать в скрмпт объект TForm

    Script->AddObject("Form1", Form1);

    ТАк нефига не получается.
  • отредактировано 04:34
    Попробуйте так:
    Script->AddClass(_classid(TForm1),"TForm");//добавляем класс наследник TForm в скрипт (TForm1 - по умол. класс главного окна).
    Script->AddObject("Form1", Form1);//передаём обект класса TForm1 и работаем с формой в скрипте.
    
  • отредактировано 04:34
    Прошу прощения перед __classid два знака подчёркивания ;)
  • отредактировано 04:34
    Уже заметил...
    Тоьлко всё равно ничего не получилось... Определил я в TForm1 в public переменную но в скрипте она всё равно не доступна...
  • отредактировано 04:34
    Дать пример?
  • отредактировано 04:34
    И ещё такой вопрос, а можно ли завернуть FastScript в DLL и юзать другим приложением?
  • отредактировано October 2005
    Пример здесь.
    написал:
    И ещё такой вопрос, а можно ли завернуть FastScript в DLL и юзать другим приложением?
    Что вы имеете ввиду(завернуть сам компонент FS или код скрипта) ?
  • отредактировано 04:34
    Именно сам компонент
  • отредактировано 04:34
    А для чего вам это нужно ;) ?

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.