int main1(int argc, const char * argv[]) { lua_State* L = luaL_newstate();//创建栈 luaopen_base(L); luaopen_io(L);//打开lua base,io两个库 int ret = luaL_loadfile(L,"tlua.lua");//加载tlua.lua文件 //成功后会返回0,反之返回非0;同时错误信息放到栈顶 if(ret != 0){ printf("load file error %s\n", luaL_checkstring(L, -1)); lua_pop(L, 1); } //一定要按照lua_pcall(L,0,0,0)的形式调用一下,个人感觉是将lua全运行起来 ret = lua_pcall(L, 0, 0, 0); if(ret != 0){ printf("pcall error %s\n", luaL_checkstring(L, -1)); lua_pop(L, 1); } stackDump1(L); //lua_getglobal会将某lua变量放置到栈顶 lua_getglobal(L, "var1"); lua_getglobal(L, "var2"); printf("lua var2 = %td ,var1=%td\n",lua_tointeger(L, -1),lua_tointeger(L, -2)); lua_getglobal(L, "add"); lua_pushinteger(L, 1); lua_pushinteger(L, 2); //lua_call 调lua函数;2个参数,1个返回值 lua_call(L, 2, 1); stackDump1(L); lua_close(L); return 0; }
以上是c++调lua ,以下是lua调c++
int main(int argc, const char * argv[]) { lua_State* L = luaL_newstate(); stackDump2(L); luaopen_base(L); luaopen_string(L); luaopen_table(L); stackDump2(L); lua_register(L,"func1",func1);//注册func1,当lua调用时,可以知道指向哪个函数指针 int i = luaL_dofile(L,"tlua.lua"); stackDump2(L); if( i != 0){ printf("%s\n",luaL_checkstring(L, -1)); lua_pop(L, -1); } lua_close(L); return 0; }
Lua代码
var1 = 100 var2 = 200 print("i am lua") --print( func1(10,11) ) function add(v1,v2) return v1+v2; end print(add(1,2))
PS:
使用lua 5.2
写了注释,如果有不明白的地方,请评论里问
下一篇讲一下lua 栈的一些东西