遂宁市住房和城乡建设局网站,发布网站制作,关于申请建设网站申请报告,wordpress二次元 插件通过c调用lua接口将数据存储到虚拟栈中#xff0c;就可以在lua脚本在虚拟栈中取得数据
c调用lua库#xff0c;加载lua文件#xff0c;
lua_State* L;//定义一个全局变量***************************L luaL_newstate();luaL_openlibs(L);//打开Lua脚本文件std::string pat…通过c调用lua接口将数据存储到虚拟栈中就可以在lua脚本在虚拟栈中取得数据
c调用lua库加载lua文件
lua_State* L;//定义一个全局变量***************************L luaL_newstate();luaL_openlibs(L);//打开Lua脚本文件std::string path SysContext::instance()-_env[WORKSPACE] test.lua;luaL_dofile(L, path.c_str());lua_getglobal(L, output); //加载lua文件中的output函数pushLua(ObjsData(数据));int iRet lua_pcall(L, 1, 1, 0);if (iRet) // 调用出错{const char* pErrorMsg lua_tostring(L, -1);lua_pop(L, 1);lua_close(L);return 1;}if (lua_isnumber(L, -1)) //取值输出{int fValue lua_tonumber(L, -1);printf(fValue:%f\n, fValue);//do something}if (lua_isstring(L, -1)) //取值输出{std::string s lua_tostring(L, -1);// do something}lua_close(L);
以下为c调用lua接口存储数据 其中 lua_settable(L, -3);
就是把表在lua堆栈中的值弹出来index 是table 在堆栈中的位置假如 table 在 -3, 则key 应该是 -2value 是 -1
结构最外层tablecountobjscount和objs都是一个tableobjs内部又包含很多个table
void pushLua(ObjsData* obj) {int ntop lua_gettop(L);lua_newtable(L);lua_pushstring(L, count); //这里需要output多一个输入lua_pushnumber(L, obj-count);lua_settable(L, -3);lua_pushstring(L, objs); //整体输入一个大的 tablefor (int i 0; i obj-count; i) {const SingleObj* p (const SingleObj*)obj[1];lua_newtable(L);lua_pushnumber(L, i);lua_newtable(L);lua_pushstring(L, x);lua_pushnumber(L, p-x);lua_settable(L, -3);lua_pushstring(L, y);lua_pushnumber(L, p-y);lua_settable(L, -3);lua_pushstring(L, z);lua_pushnumber(L, p-z);lua_settable(L, -3);lua_pushstring(L, Volume);lua_pushnumber(L, p-volume);lua_settable(L, -3);lua_settable(L, -3);}lua_settable(L, -3);
}
lua脚本如下
注意table键值对结构嵌套在取值的时候采用中括号取值如objs[0][x]若key值是字符串可以写成objs[0].x但是数字应该只能写中括号的形式
str test
function output(x)print(x.objs[0].x)res count..tostring(x.count)..,x..tostring(x.objs[0].x)..,y..tostring(x.objs[0].y)..\nreturn res
end
参考[Resolved] How to create nested Lua tables using the C API