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