调用 Lua 函数

#include <stdlib.h>

#include <lauxlib.h>
#include <lua.h>
#include <lualib.h>

int main(void)
{
    lua_State *lvm_hnd = lua_open();
    luaL_openlibs(lvm_hnd);

    /* Load a standard Lua function from global table: */
    lua_getglobal(lvm_hnd, "print");

    /* Push an argument onto Lua C API stack: */
    lua_pushstring(lvm_hnd, "Hello C API!");

    /* Call Lua function with 1 argument and 0 results: */
    lua_call(lvm_hnd, 1, 0);

    lua_close(lvm_hnd);

    return EXIT_SUCCESS;
 }

在上面的例子中,我们正在做这些事情:

  • 创建和设置 Lua VM,如第一个示例所示
  • 获取 Lua 函数并将其从全局 Lua 表推送到虚拟堆栈
  • 将字符串 Hello C API 作为输入参数推送到虚拟堆栈
  • 指示 VM 调用一个已经在堆栈中的参数的函数
  • 关闭和清理

注意:

不用考虑,lua_call() 会弹出函数,它会从堆栈中抛出参数,只留下结果。

而且,使用 Lua 保护的呼叫 - lua_pcall() 会更安全。