Comments 2
Вопрос: а как получить результат работы скрипта в C++-коде?
0
Пример: вызовем функцию
OS API реализует целый ряд функций для преобразования значений в стеке в простые типы, например,
Пример функции, которую я использую для преобразования объекта
concat
с двумя параметрами и получим результат в C++:os->getGlobal("concat"); // добавляем в стек глобальную функцию concat
os->pushNull(); // добавляем this для функции concat
os->pushNumber(5); // первый параметр для concat
os->pushString(" big differences"); // второй параметр для concat
os->call(2, 1); // вызываем функцию concat с 2 параметрами, затребуем 1 результат
OS::String res = os->popString(); // сохраним результат в виде строки и уберем его из стека
OS API реализует целый ряд функций для преобразования значений в стеке в простые типы, например,
toFloat, toDouble, toInt, toString, toUserdata, popFloat, popBool
и т.д.Пример функции, которую я использую для преобразования объекта
{x=10 y=20}
в стеке по смещению offs
в b2Vec2
(это из интеграции с Box2d):static b2Vec2 to(OS * os, int offs)
{
if(os->isObject(offs)){
os->getProperty(offs, "x"); // required
float x = os->popNumber();
os->getProperty(offs, "y"); // required
float y = os->popNumber();
return b2Vec2(x, y);
}
os->triggerError(OS_E_ERROR, "point expected");
return b2Vec2(0, 0);
}
+1
Sign up to leave a comment.
ObjectScript API, интеграция с C++. Часть 2: выполнение скрипта на OS из C++