#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()而是。