lua 进阶3--lua文件中调用C++函数
来源:互联网 发布:python 去刻度 编辑:程序博客网 时间:2024/06/10 05:19
前面讲了一下,C++读取lua文件中的变量,包括一维表、二维表这些,这节讲一下如何在lua文件中去调用C++函数
C++代码如下
<pre name="code" class="cpp">#include <stdio.h>extern "C"{#include "lua.h"#include "lualib.h"#include "lauxlib.h"}/*Lua 解释器指针 */lua_State* L;static int average(lua_State *L){ /*得到参数个数*/ int n=lua_gettop(L); double sum=0; int i; for(i=1;i<=n;i++) { if(!lua_isnumber(L,i)) { lua_pushstring(L,"Incorrect argument to 'average'"); printf("%s\n",lua_tostring(L,i); printf("%s\n","is not a number"); } else { sum+=lua_tonumber(L,i); } } /*压入平均值*/ lua_pushnumber(L,sum/n); /*压入和*/ lua_pushnumber(L,sum); /*返回返回值的个数*/ return 2;}int main ( int argc, char *argv[] ){ /*初始化Lua */ L=lua_open(); /*载入lua基本库*/ luaL_openlibs(L); lua_register(L,"average",average); /*运行脚本 */ luaL_dofile(L,"test.lua");/*清除Lua */ lua_close(L); /*暂停*/ printf("Press enter to exit .."); getchar(); return 0;}
lua 文件(test.lua)的代码如下
--call a C++ functionavg,sum = average(10,20,30,40,50,"ssss")print("The average is ",avg)print("The sum is",sum)
注意 最主要的是
要写一个能让Lua调用的C函数,就要符合lua_CFunction定义:typedef int (*lua_CFunction) (lua_State *L);
当Lua调用C函数的时候,同样使用栈来交互。C函数从栈中获取她的参数,调用结束后将结果放到栈中,并返回放到栈中的结果个数。
这儿有一个重要的概念:用来交互的栈不是全局栈,每一个函数都有他自己的私有栈。当Lua调用C函数的时候,第一个参数总是在这个私有栈的index=1的位置
上面定义的C函数是 static int average(lua_State *L) static 可要可不要 static 函数只表示在当前文件中可用,在其他文件中不可用
/*压入平均值*/
lua_pushnumber(L,sum/n); (表示将结果压入栈中 t[1])
/*压入和*/
lua_pushnumber(L,sum); (表示将结果压入栈中 t[2])
/*返回返回值的个数*/
return 2;
如果返回值有多个 比如3个 那么一定要return 3 否则的话(比如还是return 2 ,那么有一个返回值获取不到 而且返回值顺序也不对应) 不成功
lua_register(L,"average",average); // 第二个参数表示提供给lua文件的接口 第三个参数 C++中的函数名
初学lua 还不是特别熟,现在还是应用阶段,只能慢慢去深入
- lua 进阶3--lua文件中调用C++函数
- lua 进阶3--lua文件中调用C++函数
- Lua 在Lua中调用C函数
- Lua中调用C函数(lua-5.2.3)
- C中调用Lua函数
- Lua中调用C函数
- C中调用Lua函数
- c中调用Lua函数
- lua进阶1 ---C++ 中调用lua文件
- [lua]C调用lua函数
- lua进阶5--C++调用lua函数
- lua进阶5-C++调用lua函数
- Lua调用C函数
- lua 调用c函数
- Lua调用C函数
- lua调用c函数
- Lua调用C函数
- lua调用C函数
- Android使用GridView实现日历功能(详细代码)
- 12-Myeclipse项目中的jar包出现红叉问题
- java基础--类与对象(类)
- FFMPEG结构体分析 AVFormatContext
- 屏幕取色器
- lua 进阶3--lua文件中调用C++函数
- 网友做的android无级树(多级树)控件工程(含源代码)
- QQ邮件写信时不能输入数字或字母——解决方法
- RTP与RTSP的区别
- java 协变性 逆变性 学习笔记
- 可能改变你一生的31个小问题
- css控制textarea固定大小不可拖动
- 匀速运动实例---分享到
- socket学习(一)tcp传输文件的小程序