调用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, "您好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()而是。