调用 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()
会更安全。