在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:《Lua 5.3 参考手册》中文版 译者 云风 制作 Kavcc
vs2013+lua-5.3.3
1.C++调用Lua中函数 ①Lua中的函数 1 function add(x,y)
2 return x + y
3 end
②C++调用函数 1 //lua->stack,全局函数位置-1
2 lua_getglobal(L, "add");
3
4 //c->stack,传入函数参数
5 lua_pushinteger(L, 10);
6 lua_pushinteger(L, 20);
7
8 //lua->stack,调用函数,2表示传入2个参数,1表示一个返回值,并将返回值放到-1的位置
9 lua_call(L, 2, 1);
10
11 //stack->c
12 printf("add function return value : %d\n", lua_tointeger(L, -1));
2.Lua调用C++中的函数 ①Lua能调用的C++函数必须符合如下函数签名:
typedef int (*lua_CFunction) (lua_State *L);
在函数里面将相应的数据进行栈操作; 返回值表示入栈供Lua使用的返回值个数。 ②C++中函数 函数里的栈都是函数自己私有的,当函数返回时该栈会被自动清空。 1 int average(lua_State* L){
2 //lua->stack,得到Lua调用函数输入的个数
3 int lua_args_count = lua_gettop(L);
4
5 //lua->c,得到所有Lua中输入参数的值
6 lua_Number sum = 0;
7 for (int i = 1; i <= lua_args_count; ++i){
8 sum += lua_tonumber(L, i);
9 }
10
11 //c->stack,将平均值和总值返回到Lua中的返回值
12 lua_pushnumber(L, sum / lua_args_count);
13 lua_pushnumber(L, sum);
14
15 //返回个数给Lua
16 return 2;
17 }
③注册C++的函数到Lua中 1 lua_register(L, "average", average);
2
3 ////lua_register宏替代了下面两个函数
4 //lua_pushcfunction(L, average);
5 //lua_setglobal(L, "average");
④Lua中进行调用C++中的函数 1 local ave,sum = average(10,20,30)
2 print("ave : ",ave," sum : ",sum)
Lua和C++交互系列:
《Lua和C++交互 学习记录之七:C++全局函数注册为Lua模块》
《Lua和C++交互 学习记录之八:C++类注册为Lua模块》
《Lua和C++交互 学习记录之九:在Lua中以面向对象的方式使用C++注册的类》
|
请发表评论