Script.lua内容为
function sub(x, y)
return x -y
end
调用方式为:
#include <stdio.h>
#include <lua.h>
#include <lualib.h>
#include <lauxlib.h>
#define LUA_TOP_TYPE(L) {int t = lua_type(L, -1); printf("%s\n", lua_typename(L, t));}
int main()
{
lua_State* L = luaL_newstate();
luaL_openlibs(L);
luaL_dofile(L, "script.lua");
// Call Script function
lua_getglobal(L, "sub"); //将script.lua 的sub函数压入栈顶
LUA_TOP_TYPE(L); // 打印function
lua_pushnumber(L, 1);
lua_pushnumber(L, 2);
lua_pcall(L, 2, 1, 0);
//函数调用,参数2代表函数有2个参数,1代表一个返回值,0代表回调函数为空,
//调用成功该函数会弹出参数以及函数,然后把返回值压入栈。
//我们的例子中,程序执行完lua_pcall栈上只有返回值。
// tonumber 不会弹栈
int ret = lua_tonumber(L, -1);
lua_pop(L, 1);
lua_close(L);
return 1;
//运行结果: 打印-1
}
C调用lua函数,注意栈上的number与参数的对应顺序。x对应1,y对应2。这跟参数压栈保持一致。
网友评论