lua语言规则:
lua_State * L = lua_open(); // 建立一个LUA状态机 luaopen_base(L); // 启动它 const char * buf = " print('hello, world!') " ; lua_dostring(buf); // 把buf写入到lua中并执行 lua_close(L); // 关闭L lua_pushstring(L, " var " ); // 将变量的名字放入栈] lua_getglobal(L, " var " ); // 变量的值现在栈顶 int var = lua_tonumber(L, - 1 ); // 取得栈顶的元素 lua_tostring( ls, - 1 ); // 取得栈顶的的元素, 一般用于参数传递 lua_pushstring( ls, s_szPlayer ); // 把某个字符串元素压入栈中,可用于参数传出 lua_pushnumber(L, 200 ); // 把某个数字元素压入栈中, lua_register(L, " foo " , foo);// 把自己在C++中编写的函数foo拿到lua中注册,这样在lua脚本中就可以调用这个函数
在Lua中,函数等同于变量,所以你可以这样来取得这个函数:
lua_getglobal(L, " main " ); // 函数现在栈顶
现在,我们可以调用这个函数,并传递给它正确的参数:
lua_pushnumber(L, 100 ); // 将参数压栈 lua_pcall(L, 1 , 1 , 0 ); // 调用函数,有一个参数,一个返回值 // 返回值现在栈顶 int result = lua_tonumber(L, - 1 );
例子:
#include " lua.h " #include " lauxlib.h " #include " lualib.h " int foo(lua_State * L) { // 首先取出脚本执行这个函数时压入栈的参数 // 假设这个函数提供一个参数,有两个返回值 // get the first parameter const char * par = lua_tostring(L, - 1 ); printf( " %s/n " , par); // push the first result lua_pushnumber(L, 100 ); // push the second result lua_pushnumber(L, 200 ); // return 2 result return 2 ; } int main( int argc, char * argv[]){ lua_State * L = lua_open(); luaopen_base(L); luaopen_io(L); lua_register(L, " foo " , foo); const char * buf = " r1, r2 = foo( " hello " ) print(r1..r2) " ; lua_dostring(L, buf); lua_close(L); return 0 ; }