首页 > 代码库 > Lua和C++交互 学习记录之四:全局表交互
Lua和C++交互 学习记录之四:全局表交互
主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍)
部分内容查阅自:《Lua 5.3 参考手册》中文版 译者 云风 制作 Kavcc
vs2013+lua-5.3.3
1.C++读取Lua中的表
①在hello.lua中设置一个全局表:
global_c_read_table = {integer_val = 1,double_val = 2.34,string_val = "test_string"}
②在C++中读取
1 //lua->stack,得到全局表,位置-1 2 lua_getglobal(L, "global_c_read_table"); 3 4 //-------------------得到第一个值---------------------------- 5 //c->statck,设置key值,位置-1(上面的-1变为-2) 6 lua_pushstring(L,"integer_val"); 7 8 //lua->statck,将-1位置的key值弹出,从lua中得到对应key的值,并将结果放在-1的位置 9 //如果没有值,则结果为TNIL10 lua_gettable(L, -2);11 12 //statck->c13 if (lua_isinteger(L, -1)){14 printf("integer_val : %lld\n", lua_tointeger(L, -1));15 }16 17 //弹出-1位置的结果,之后全局表的位置恢复到-118 lua_pop(L, 1);19 20 //-------------------重复上述步骤,得到第二个值----------------------------21 lua_pushstring(L, "double_val");22 lua_gettable(L, -2);23 if (lua_isnumber(L, -1)){24 printf("double_val : %g\n", lua_tonumber(L, -1));25 }26 lua_pop(L, 1);27 //-------------------重复上述步骤,得到第三个值----------------------------28 lua_pushstring(L, "string_val");29 lua_gettable(L, -2);30 if (lua_isstring(L, -1)){31 printf("string_val : %s\n", lua_tostring(L, -1));32 }33 lua_pop(L, 1);
2.C++将表写入Lua
①C++写入
1 //c->stack,创建一个新的table放到-1的位置 2 lua_newtable(L); 3 4 //c->stack,增加一个key,放在-1的位置,table位置变为-2 5 lua_pushstring(L, "integer_val"); 6 7 //c->stack,增加key对应的值,放在-1位置,key位置变为-2,table位置变为-3 8 lua_pushinteger(L, 1); 9 10 //将key和val设置到table中,并弹出key和val,此时table位置变为-111 lua_settable(L, -3);12 13 //stack->lua,将table赋值到lua中,并弹出table14 lua_setglobal(L, "global_c_write_table");
②在hello.lua中进行Lua读取
1 for k,v in pairs(global_c_write_table) do 2 print("k = ",k," v = ",v)3 end
Lua和C++交互 学习记录之四:全局表交互
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。