В настоящее время я использую luabind, в частности https://github.com/rpavlik/luabind с момента официального выпуска устарел и больше не компилируется с последней версией boost.
У меня возникла очень странная проблема, которую я нигде не могу найти в сети. Мне удалось свести дело к очень простому сценарию.
В одном модуле у меня будет:
luabind::object value;
void functionA() {
lua_pushstring(L,"yo");
luabind::object temp(luabind::from_stack(L,-1));
value = temp;
}
В другом модуле у меня будет:
void functionB() {
printf("My Value: %s\n",luabind::object_cast<const char*>(value));
printf("My Original value type: %d\n",luabind::type(value));
value.push(L);
luabind::object a1(luabind::from_stack(L,-1));
printf("My Copy value type: %d\n",luabind::type(a1));
}
Когда я делаю functionA и functionB доступными из lua и вызываю их последовательно, вывод будет:
My Value: yo
My Original value type: 4
My Copy value type: 0
Как видите, объект по-прежнему ссылается на то, что luabind может распечатать. Но когда я пытаюсь поместить его в стек и создать новый объект из объекта стека, это приведет к нулевому значению.
Это происходит только в этом конкретном случае. Когда я помещаю все в одну функцию, все работает нормально. Когда я помещаю код в функции одного и того же модуля, он будет работать нормально. Я еще не сделал отдельный тестовый проект, но я не могу думать, что что-то в моем коде мешает, функции вызываются напрямую из lua.
Я делаю что-то неправильно? Или это ошибка? А если это ошибка, почему я никогда не слышал о подобном?