美文网首页
Lua与C数据交互二: C 调用Lua函数

Lua与C数据交互二: C 调用Lua函数

作者: feiperr | 来源:发表于2020-02-12 22:50 被阅读0次

    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。这跟参数压栈保持一致。

    相关文章

      网友评论

          本文标题:Lua与C数据交互二: C 调用Lua函数

          本文链接:https://www.haomeiwen.com/subject/fpehfhtx.html