标签:
lua_State *L = luaL_newstate();//创建一个新的栈 lua_pushstring(L, "muzixiaoxin"); //把一个字符串压入栈 lua_pushnumber(L, 875);//把一个整型压入栈 //现在栈内有两个元素,栈底是字符串"muzixiaoxin",栈顶是整型875 //"muzixiaoxin"的索引就是1,或者-2 //855的索引就是2,或者-1 if (lua_isstring(L, 1)){//判断栈底的元素是不是字符串 printf("%s\n",lua_tostring(L, 1));//如果是字符串就转换成字符串输出 } if (lua_isnumber(L, -1)){//判断栈顶元素是不是number类型 printf("%d", lua_tonumber(L, 2));//如果是就转换成number类型输出 } lua_close(L); //记得不需要的时候要释放掉
name = "muzixiaoxin" version = 1003
lua_State *L = luaL_newstate(); int err = luaL_loadfile(L, "test.lua"); //把lua文件加载成代码块,只加载不运行 if (err){ return; } err = lua_pcall(L, 0, 0, 0);//运行加载的代码块 if (err){ return; } lua_getglobal(L, "name"); //把全局变量name的值压入栈顶 printf("%s\n", lua_tostring(L, -1));//取出栈顶元素打印结果为:muzixiaoxin lua_close(L); //记得不需要的时候要释放掉
//计算求和的方法 static int sum(int a, int b){ return a + b; }
这个方法就是求两个整型的和。我们要让lua使用这个方法,就要先把这个方法注册给lua的状态机,但注册给lua状态机的方法要求有固定的参数和固定的返回值,参数要是是一个lua虚拟栈,这个虚拟栈存放着lua传过来的参数,lua调用的返回值也要通过这个虚拟栈返回给lua,最后的返回值要求是一个int值,存着返回给lua变量的个数。我们看写好的方法:
//lua调用的方法 static int lsum(lua_State *L){ int a = (int)lua_tonumber(L, -1);//lua调用的参数之一 int b = (int)lua_tonumber(L, -2);//lua调用的参数之一 lua_pushnumber(L, sum(a, b));//把计算的加过压栈 return 1;//返回返回值的个数 }
下一步是吧lsum这个方法注册给lua状态机:
lua_State *L = luaL_newstate(); luaL_openlibs(L);//打开L中的所有标准库,这样就可以使用print方法 lua_register(L, "sum", lsum);//把c函数lsum注册为lua的一个全局变量sum int err = luaL_dofile(L, "test.lua"); //把lua文件加载成代码块,并运行 if (err){ return; } lua_close(L);
test.lua的内容是:
print("1 + 2 = " .. sum(1,2))
标签:
原文地址:http://www.cnblogs.com/cxiaojia/p/5133864.html