在Lua代码中调用c/C++函数
来源:互联网 发布:2017编程语言趋势 编辑:程序博客网 时间:2024/05/16 19:31
引用:http://blog.chinaunix.net/uid-52437-id-2108806.html
在Lua代码中调用C/c++函数对Lua来说至关重要,让Lua能真正站到C这个巨人的肩膀上。
要写一个能让Lua调用的C/c++函数,就要符合lua_CFunction定义:typedef int (*lua_CFunction) (lua_State *L);当Lua调用C函数的时候,同样使用栈来交互。C函数从栈中获取她的参数,调用结束后将结果放到栈中,并返回放到栈中的结果个数。
这儿有一个重要的概念:用来交互的栈不是全局栈,每一个函数都有他自己的私有栈。当Lua调用C函数的时候,第一个参数总是在这个私有栈的index=1的位置。
- ...
- #include <complex> //复数
- //C函数,做复数计算,输入实部,虚部。输出绝对值和角度
- int calcComplex(lua_State *L)
- {
- //从栈中读入实部,虚部
- double r = luaL_checknumber(L,1); //判断栈第1个值是不是数据,如果是就返回这个数字;
- double i = luaL_checknumber(L,2);//判断栈第2个值是不是数据,如果是就返回这个数字;
- complex<double> c(r,i);
- //存入绝对值
- lua_pushnumber(L,abs(c));//把abs(c)计算的结果放到栈中,这是规定,看上面粗体字;
- //存入角度
- lua_pushnumber(L,arg(c)*180.0/3.14159);
- return 2;//两个结果 //返回存入栈中结果个数,这也是规定,看上面粗体字;
- }
- int main()
- {
- char *szLua_code =
- "v,a = CalcComplex(3,4) "
- "print(v,a)";
- lua_State *L = luaL_newstate(); ///初始化lua环境,加载了5.1版本的所有程序库
- luaL_openlibs(L);//分开加载库听说因为是io库有个bug;
- //放入C函数
- lua_pushcfunction(L, calcComplex); //把一个c函数放到栈中
- lua_setglobal(L, "CalcComplex");//从栈中pop一个值出来,并命名为"CalcComplex"供lua调用;
- //执行
- bool err = luaL_loadstring(L, szLua_code)||lua_pcall(L, 0, 0, 0);//lua_pcall()是判断执行lua语句是否有错,成功为0
- if(err)
- {
- cerr << lua_tostring(L, -1);
- lua_pop(L, 1);
- }
- lua_close(L);
- return 0;
- }
#define lua_register(L,n,f) (lua_pushcfunction(L, (f)), lua_setglobal(L, (n)))
这两句代码也就可写成lua_register(L,"CalcComplex",calcComplex);
0 0
- Lua 在Lua中调用C函数
- 在Lua代码中调用c/C++函数
- 在Lua代码中调用c/C++函数
- 在C中调用Lua代码
- 在Lua中调用C函数
- Lua 在C程序中调用Lua函数
- C中调用Lua函数
- Lua中调用C函数
- C中调用Lua函数
- c中调用Lua函数
- 在汇编代码中调用C函数
- 在LUA脚本中调用C/C++函数
- 如何在c/c++中调用LUA函数
- 在c中调用lua函数,获取返回值等
- 在C中调用lua的内置函数string.gsub
- 在c中调用lua函数,获取返回值等
- cocos2dx关于在c/c++中调用lua函数
- [lua]C调用lua函数
- USB设备被识别流程
- 查询用户的服务组织
- 关于css的几点
- Android apk检测病毒-VirSCAN
- Java 中extends与implements使用方法
- 在Lua代码中调用c/C++函数
- activity的启动模式
- 韩顺平老师亲临成都 PHP基础班火爆开班
- 单选按钮的实现
- redis备份机恢复
- java中substring的用法
- 【.NET特供-第三季】ASP.NET MVC系列:MVC与三层图形对比
- Hdu 4845 2048(dp)
- Android程序员必备精品资源