我目前正在使用 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));
}
当我从 lua 提供 functionA 和 functionB 并连续调用它们时,输出将是:
My Value: yo
My Original value type: 4
My Copy value type: 0
如您所见,该对象仍然引用了 luabind 可以打印的内容。但是当我尝试将它压入堆栈并从堆栈对象创建一个新对象时,它会产生一个 nil 值。
这只发生在这种特定情况下。当我把所有东西都放在一个函数中时,它工作得很好。当我将代码放入同一模块的函数中时,它会正常工作。我还没有制作一个独立的测试项目,但是我想不出我的代码中有任何干扰,这些函数是从 lua 直接调用的。
难道我做错了什么?或者这是一个错误?如果它是一个错误,我怎么从来没有听说过这样的事情?