1.C语言调用Lua脚本。
C语言中调用Lua脚本的最开始的步骤是一样的,都是打开一个类似于*File的文件描述符之类的东西。
具体是这样的:
lua_State*L=lua_open();
然后加载运行库:
根据Lua版本的不同有以下几种形式:
luaL_openlibs(L);
或者
lua_baselibopen(L);
或者是
luaopen_base(L);//Lua5.0中的用法 luaopen_string(L);
luaopen_io(L);
luaopen_math(L);
a.加载Lua脚本文件
luaL_loadfile(L,"cof.lua")
或者是
lua_dofile(L, "add.lua");
都可以加载Lua脚本
b.如果想从Lua脚本中读取变量
假设Lua脚本里有变量width和height
可以这样来读取
lua_getglobal(L,"width");
lua_getglobal(L,"height");
也就是把Lua里的变量读出来存到栈里面。
然后可以检验类型
if(!lua_isnumber(L,-2))
luaL_error(L,"`width' should be a number\n");
if(!lua_isnumber(L,-1))
luaL_error(L,"`height' should be a number\n");
由于Lua里的变量是没有类型的,因此读出来后要我们显示的转换
类型
*width = (int)lua_tonumber(L,-2);
*height = (int)lua_tonumber(L,-1);
c.如果想传递给Lua参数调用Lua里的函数
首先将Lua里的函数压栈
lua_getglobal(L,"add");
然后将要传递的参数依次压栈
lua_pushnumber(L,a);lua_pushnumber(L,b);
最后调用
if(lua_pcall(L,2,1,0) != 0)
调用后栈里的元素全部弹出函数返回时返回值压栈因为函数有返回值,
所以要检验if(!lua_isnumber(L,-1))
因为Lua里的数字没有类型所以返回值要类型转换
sum = (int)lua_tonumber(L,-1); lua_pop(L,1)
d.如果调用Lua里的无参函数
首先将函数名压栈
lua_getglobal(L,"roll_num");
然后调用if(lua_pcall(L,0,1,0) != 0)
然后验证返回值if(!lua_isnumber(L,-1))
最后转存 int n = (i nt)lua_tonumber(L,-1);
弹出 lua_pop(L,1);