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

部分内容查阅自:《Lua 5.3  参考手册》中文版 译者 云风 制作 Kavcc

vs2013+lua-5.3.3

1.C++读取Lua中的table

①在hello.lua中设置一个全局table:

global_c_read_table = {integer_val = ,double_val = 2.34,string_val = "test_string"}

②在C++中读取

     //lua->stack,得到全局表,位置-1
lua_getglobal(L, "global_c_read_table"); //-------------------得到第一个值----------------------------
//c->statck,设置key值,位置-1(上面的-1变为-2)
lua_pushstring(L, "integer_val"); //lua->statck,将-1位置的key值弹出,从lua中得到对应key的值,并将结果放在-1的位置
//如果没有值,则结果为TNIL
lua_gettable(L, -);//返回值为值的类型 //statck->c
if (lua_isinteger(L, -)){
printf("integer_val : %lld\n", lua_tointeger(L, -));
} //弹出-1位置的结果,之后全局表的位置恢复到-1
lua_pop(L, ); //-------------------重复上述步骤,得到第二个值----------------------------
lua_pushstring(L, "double_val");
lua_gettable(L, -);//返回值为值的类型
if (lua_isnumber(L, -)){
printf("double_val : %g\n", lua_tonumber(L, -));
}
lua_pop(L, );
//-------------------重复上述步骤,得到第三个值----------------------------
lua_pushstring(L, "string_val");
lua_gettable(L, -);//返回值为值的类型
if (lua_isstring(L, -)){
printf("string_val : %s\n", lua_tostring(L, -));
}
lua_pop(L, );

③lua_getfield函数

//使用lua_getfield代替lua_pushxxx和lua_gettable两个函数,返回值为值的类型
lua_getfield(L, -, "integer_val");

在 Lua 中,这个函数可能触发对应 "index" 事件对应的元方法。

在后面的 绑定C++类在Lua中面向对象 会使用到其对应的lua_setfield方法。

2.C++将table写入Lua

①C++写入

         //c->stack,创建一个新的table放到-1的位置
lua_newtable(L); //c->stack,增加一个key,放在-1的位置,table位置变为-2
lua_pushstring(L, "integer_val"); //c->stack,增加key对应的值,放在-1位置,key位置变为-2,table位置变为-3
lua_pushinteger(L, ); //将key和val设置到table中,并弹出key和val,此时table位置变为-1
lua_settable(L, -); //stack->lua,将table赋值到lua中,并弹出table
lua_setglobal(L, "global_c_write_table");

②在hello.lua中进行Lua读取

 for k,v in pairs(global_c_write_table) do
print("k = ",k," v = ",v)
end

3.其它常用table函数

①LUA_API int (lua_rawget) (lua_State *L, int idx);

类似于 lua_gettable , 但是作一次直接访问(不触发元方法),速度更快。

返回值为值的类型。

②LUA_API void  (lua_rawset) (lua_State *L, int idx);

类似于 lua_settable , 但是是做一次直接赋值(不触发元方法),速度更快。

返回值为值的类型。

Lua和C++交互系列:

Lua和C++交互 学习记录之一:C++嵌入脚本

Lua和C++交互 学习记录之二:栈操作

Lua和C++交互 学习记录之三:全局值交互

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

Lua和C++交互 学习记录之五:全局数组交互

Lua和C++交互 学习记录之六:全局函数交互

Lua和C++交互 学习记录之七:C++全局函数注册为Lua模块

Lua和C++交互 学习记录之八:C++类注册为Lua模块

Lua和C++交互 学习记录之九:在Lua中以面向对象的方式使用C++注册的类

Lua和C++交互 学习记录之四:全局table交互的更多相关文章

  1. Lua和C++交互 学习记录之七:C++全局函数注册为Lua模块

    主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3  参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 1 ...

  2. Lua和C++交互 学习记录之六:全局函数交互

    主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3  参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 1 ...

  3. Lua和C++交互 学习记录之五:全局数组交互

    主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3  参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 1 ...

  4. Lua和C++交互 学习记录之三:全局值交互

    主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3  参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 1 ...

  5. Lua和C++交互 学习记录之九:在Lua中以面向对象的方式使用C++注册的类

    主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3  参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 在 ...

  6. Lua和C++交互 学习记录之八:C++类注册为Lua模块

    主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3  参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 1 ...

  7. Lua和C++交互 学习记录之二:栈操作

    主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3  参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 1 ...

  8. Lua和C++交互 学习记录之一:C++嵌入脚本

    主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3  参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 1 ...

  9. SpringMVC学习记录七——sjon数据交互和拦截器

    21       json数据交互 21.1      为什么要进行json数据交互 json数据格式在接口调用中.html页面中较常用,json格式比较简单,解析还比较方便. 比如:webservi ...

随机推荐

  1. JavaWeb创建的文件夹默认在tomcat/bin中

    系统项目中需要设置缓存目录,原本项目中的目录设置为D:/cache目录,这怎么成?于是手动改成了cache目录,原本想使用了相对路径,web项目能够把缓存路径设置到tomcat的webapp的具体项目 ...

  2. Python3 WebDriver操作cookie的方法

    Python3 WebDriver操作cookie的方法 WebDriver提供了操作Cookie的相关方法,可以读取.添加和删除cookie信息. WebDriver操作cookie的方法: get ...

  3. AngularJs 开发遇到的问题,以及解决方案

    1>ng-if 导致 ng-model 失效的问题 比如说下拉联动隐藏显示的时候,多个验证模块,需要使用到ng-if.可以使用 $parent 来解决这个问题 ng-model="$p ...

  4. oracle 11g SKIP_UNUSABLE_INDEXES参数

    SKIP_UNUSABLE_INDEXES的作用是在DML期间跳过对索引的维护,这样可以提交DML的效率,可以事后一次性重建,但是SKIP_UNUSABLE_INDEXES=y对unique inde ...

  5. gdb远程debug A syntax error in expression, near `variable)'.

    今天调试有个linux环境的应用时,gdb提示A syntax error in expression, near `variable)'.,最后经查,gdb版本过低(比如7.2)或者源代码不匹配所致 ...

  6. 2018-2019-2 《网络对抗技术》Exp3 免杀原理与实践 20165211

    目录 2018-2019-2 <网络对抗技术>Exp3 免杀原理与实践 20165211 1. 基础问题回答 (1)杀软是如何检测出恶意代码的? (2)免杀是做什么? (3)免杀的基本方法 ...

  7. Bugku-CTF之web3-flag就在这里快来找找吧

    Day6 web3 30 flag就在这里快来找找吧http://123.206.87.240:8002/web3/ 本题要点:NCR 转义序列(Unicode)   在Windows中经常需要用到多 ...

  8. topcoder srm 681 div1

    problem1 link 二分答案.然后判断.将所有的机器按照$a_{i}$排序,$a_{i}$相同的按照$b_{i}$排序.用一个优先队列维护这些机器.这样对于第$i$个部分,拿出队列开始的机器来 ...

  9. HDU 1848 Fibonacci again and again【博弈SG】

    Problem Description 任何一个大学生对菲波那契数列(Fibonacci numbers)应该都不会陌生,它是这样定义的: F(1)=1; F(2)=2; F(n)=F(n-1)+F( ...

  10. HIHOcoder 1403 后缀数组一·重复旋律

    思路 后缀数组的板子题,注意后缀数组的rank[]数组是通过位置找到对应排名的,sa[]是通过排名找到位置的,height[i]记录的是sa[i]和sa[i+1]之间的lcp 不要写错了就行了 代码 ...