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);