我有一个小的Lua脚本: function g () print( AUp);end 从C我加载脚本,添加一个名为AUp的变量,让它运行几百次. for( i=0; i2000; i++){ num= i; lua_pushnumber( L, i); lua_setglobal( L, "AUp"); lua_getglobal( L, "g"); i
function g () print( AUp); end
从C我加载脚本,添加一个名为AUp的变量,让它运行几百次.
for( i=0; i<2000; i++) { num= i; lua_pushnumber( L, i); lua_setglobal( L, "AUp"); lua_getglobal( L, "g"); if (lua_call( L, 0, 0) != 0) printf( "%s", lua_tostring(L, -1)); }
始终是打印输出为0.如果我输入(i 1),输出始终为1.我无法更改AUp的值.该值保持不变,就像第一次调用lua_pushnumner和lua_setglobal时一样.
怎么了?该函数应该一次又一次地调用,但是AUp的值可以改变,所以我必须在调用lua_call之前更新它.
我不确定,但你试过了:1.在Lua脚本中定义AUp初始值.
2.在C循环期间清理堆栈值. ?
编辑:
忘了那两点:)
for(i = 0; i<200; i++) { lua_pushnumber(l, i); lua_setglobal(l, "foo"); lua_getglobal(l, "test_f"); if (lua_pcall(l, 0, 0, 0) != 0) { printf( "%s", lua_tostring(l, -1)); } }
和
function test_f() print(foo) end
使用Lua 5.1.5可以正常工作
顺便说一句,根据manual – void lua_call(lua_State * L,int nargs,int nresults); (改用lua_pcall()).甚至无法使用Lua 5.1.5标头编译您的代码.