LUA C 交互 cocos

注册 函数给Lua使用 lua_newtable(L); lua_pushstring(L, "callStaticMethod"); lua_pushcfunction(L, LuaCBridge::callCStaticMethod); lua_rawset(L, -3); lua_setglobal(L, "LuaCBridge"); int LuaCBridge::callCStaticMethod(lua_State* L) { log("callCStaticMethod======"); const char *action_key = lua_tostring(L, 1); const char *action_value = lua_tostring(L, 2); const char *content = lua_tostring(L,3); // log("actionkey=%s",action_key); if (!action_key || !action_value) { lua_newtable(L);//创建一个表格,放在栈顶 lua_pushstring(L, "res");//压入key lua_pushnumber(L, 1);//压入value lua_settable(L, -3);//弹出key,value,并设置到table里面去 return 1;//堆栈里现在就一个table.其他都被弹掉了。 } else { lua_newtable(L);//创建一个表格,放在栈顶 lua_pushstring(L, "res");//压入key lua_pushnumber(L, 1);//压入value lua_settable(L, -3);//弹出key,value,并设置到table里面去 lua_pushstring(L, "data");//压入key lua_pushstring(L, "json");//压入json格式data lua_settable(L,-3);//弹出key,value,并设置到table里面去 // lua_newtable(L);//压入value,也是一个table // lua_pushstring(L, "userId");//压入subtable的key // lua_pushnumber(L,53);//value // lua_settable(L,-3);//弹出key,value,并设置到subdata table // lua_settable(L,-3);//这时候父table的位置还是-3,弹key,value(subtable),并设置到table里去 // lua_pushstring(L, "mydata2");//同上 // lua_pushnumber(L,77); // lua_settable(L,-3); } return 1; } C调用lua全局函数 //c call lua /* 把CCallLua函数对象放到栈中 */ // lua_getglobal(L, "CCallLua"); // lua_newtable(L); // lua_pushstring(L, "res");//压入key // lua_pushnumber(L, 1);//压入value // lua_settable(L, -3);//弹出key,value,并设置到table里面去 // lua_pushstring(L, "data");//压入key // lua_pushstring(L, "jsondata");//压入json格式data // lua_settable(L, -3);//弹出key,value,并设置到table里面去 // /* // 执行函数,第一个参数表示函数的参数个数,第二个参数表示函数返回值个数 , // Lua会先去堆栈取出参数,然后再取出函数对象,开始执行函数 // */ // lua_call(L, 1, 1);
原文地址:https://www.cnblogs.com/sujiehaojava/p/7762684.html