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

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容