呼叫 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() 會更安全。