码迷,mamicode.com
首页 > 编程语言 > 详细

Lua和C++交互 学习记录之四:全局表交互

时间:2016-09-20 19:43:43      阅读:269      评论:0      收藏:0      [点我收藏+]

标签:

主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍)

部分内容查阅自:《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         //如果没有值,则结果为TNIL
10         lua_gettable(L, -2);
11 
12         //statck->c
13         if (lua_isinteger(L, -1)){
14             printf("integer_val : %lld\n", lua_tointeger(L, -1));
15         }
16 
17         //弹出-1位置的结果,之后全局表的位置恢复到-1
18         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位置变为-1
11         lua_settable(L, -3);
12 
13         //stack->lua,将table赋值到lua中,并弹出table
14         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++交互 学习记录之四:全局表交互

标签:

原文地址:http://www.cnblogs.com/chevin/p/5889119.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!