C++与lua交互之C++访问lua
2024-10-19 16:26:54
假设lua中:
name="gzw"
id=17010805
sex=man tab={
num=100,
str="hello"
} foo_one=function()
print("不带参数的foo()被调用了")
end foo_two=function(num)
print("num=",num)
return num
end
接下来要在C++中调用lua.
首先看调用全局变量:
int main()
{
lua_State* L=luaL_newstate(); //创建lua虚拟栈
luaL_openlibs(L); //打开需要链接的库
luaL_dofile(L,"a.lua");
lua_getglobal(L,"name"); //把lua中的全局变量name拿出来压入了虚拟栈中
lua_getglobal(L,"id");
printf("栈中元素个数为:%d\n",lua_gettop(L)); //得到栈顶的索引,相当于求栈的长度 const char* str=lua_tostring(L,1); //压入的为字符长,所以根据索引转化打印
int id=lua_tonumber(L,2);
printf("str=%s\n",str);
printf("id=%d\n",id); lua_close(L);
return 0;
}
接下来看C++调用lua表中的字段
lua_getglobal(L,"tab");
lua_pushstring(L,"str"); lua_gettable(L,-2); printf("tab.str=%s\n",lua_tostring(L,-1));
lua_pop(L,1);
lua_pushstring(L,"num");
lua_gettable(L,-2); printf("tab.num=%g\n",lua_tonumber(L,-1));
lua_gettable(L,Index) index指的是表,执行这句话会把栈顶元素当成键,根据这个键把对应的值找到,然后把值压入表中,也就是执行完这段后,栈顶元素为tab,但是里面有了值.
lua_getfield(L,-1,"num");这句等价于 lua_pushstring(L,-1,“num”); lua_gettable(L,-2);
C++调用lua中的函数:
lua_getglobal(L,"foo_one"); lua_pcall(L,0,0,0); lua_getglobal(L,"foo_two");
lua_pushnumber(L,123);
lua_pcall(L,1,1,0);
最新文章
- jackson简单使用,对象转json,json转对象,json转list
- bzoj 2287: 【POJ Challenge】消失之物
- Android Paint类方法说明
- Android显示等宽图片的问题
- HDU 5422 Rikka with Graph
- PowerDesigner 12.5 反向工程sql server
- Apache Spark BlinkDB
- 同样的JS写法,为啥只有IE9模式正常?
- java常量设置的方式
- Windows下visual studio code搭建golang开发环境
- MINIGUI 编译 helloworld
- CF 322A Ciel and Dancing 好简单的题。。最喜欢水题了
- 第一章:Netty介绍
- Node.js中的异步I/O是如何进行的?
- Django(九)下:Ajax操作、图片验证码、KindEditor使用
- 帆软报表(FineReport)实现跨数据源父子查询(2阶段查询)
- usrp-B210
- golang 实现延迟消息原理与方法
- 【ORACLE 】 ORA-00031 标记要删去的会话(解决)
- webpack快速入门——CSS进阶,Less文件的打包和分离