Здравствуйте,
Основная задача - сделать разделяемую между двумя и более скриптами переменную
Подробнее можно сказать так:
1) Есть 2 объекта класса QScriptEngine, т.е. 2 независимых скрипта
2) Каждому из них доступна ф-я, которая создаёт переменную по имени. Причём эта переменная создаётся только в том случае, если её ещё нет. Проверка осуществляется по имени.
3) Любой скрипт может менять переменную, причём, её новое значение, должен увидеть 2-й скрипт.
Проблемная часть в коде выглядит так:
C++ (Qt)
QScriptValue getSet( QScriptContext *ctx, QScriptEngine *eng )
{
if( ctx->argumentCount() == 0 )
return m_var;
m_var = ctx->argument(0);
return m_var;
}
Сам код работает без ошибок. Но когда один скрипт с его помощью установил значение переменной m_var, а другой её взял и пытается использовать, вот тут и начинаются проблеммы. В отладчике видно, что на некотором этапе происходит проверка, является ли переменная созданной в скрипте, если да, то является ли она принадлежащей данному скрипту и если нет то дальше работать нехотим и получите ASSERT.
После долгих исканий я написал код при возврате в таком виде:
C++ (Qt)
QScriptValue mkNew( const QScriptValue &v, QScriptEngine *eng )
{
QScriptEngine *pengOrig = v.engine();
return (v.isValid()==false
? eng->undefinedValue()
: ((pengOrig==NULL || pengOrig==eng)
? v
: (v.isUndefined()
? eng->undefinedValue()
: (v.isNull()
? eng->nullValue()
: eng->toObject( v )
)
)
)
);
}
QScriptValue getSet( QScriptContext *ctx, QScriptEngine *eng )
{
if( ctx->argumentCount() == 0 )
return mkNew( m_var, eng );
m_var = ctx->argument(0);
return m_var;
}
И радовался, пока не попытался так передать массив (объект не пробовал, но думаю будет тоже самое). пока ещё долго отладчиком не ходил, но по аналогии думаю, что проблемма в том, что мой код более-менее нормально преобразовывает только верхушку иерархии, а внутренние объекты так и остаются пренадлежащими другому скрипту, что опять вызывает проблеммы.
Неужели нужно всю иерархию вручную преобразовывать?
Есть ли готовый способ нужного мне преобразования?