在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
今天项目中要在lua中调用有返回值的c++函数,对于这方面从来没用做过,所以就开始各种照猫画虎~~~~ 找到了audio.lua。看到了function audio.playMusic(filename, isLoop)方法。 修改sharedEngine:playMusic( filename, isLoop)成sharedEngine:playMusic( DCConfigParams.helperFind(filename), isLoop) 打开DCConfigParams.lua,添加如下代码: -- 读取文件
function DCConfigParams.helperFind(str)
return DCLuaConfigParams:helperFind(str)
end
找到项目中DataEye.cpp 找到了这个地方: tolua_cclass(tolua_S, "DCLuaConfigParams", "DCLuaConfigParams", "", NULL);
tolua_beginmodule(tolua_S, "DCLuaConfigParams");
tolua_function(tolua_S, "update", tolua_DataEye_DCConfigParams_update00);
tolua_function(tolua_S, "getParameter", tolua_DataEye_DCConfigParams_getParameter00);
tolua_function(tolua_S, "getParameter", tolua_DataEye_DCConfigParams_getParameter01);
tolua_function(tolua_S, "getParameter", tolua_DataEye_DCConfigParams_getParameter02);
在下面添加: // 解密
tolua_function(tolua_S, "helperFind", tolua_DataEye_DCConfigParams_helperFind03);
如图:
其实我自己是照着“tolua_function(tolua_S, "getParameter", tolua_DataEye_DCConfigParams_getParameter02)”方法去写的 接下来,坑来了,复制了tolua_DataEye_DCConfigParams_getParameter02的实现方法,修改后如下: /* method: helperFind of class DCLuaConfigParams */
#ifndef TOLUA_DISABLE_tolua_DataEye_DCConfigParams_helperFind03
static int tolua_DataEye_DCConfigParams_helperFind03(lua_State* tolua_S)
{
#ifndef TOLUA_RELEASE
tolua_Error tolua_err;
if (
!tolua_isusertable(tolua_S,1,"DCLuaConfigParams",0,&tolua_err) ||
!tolua_isnoobj(tolua_S,2,&tolua_err)
)
goto tolua_lerror;
else
#endif
{
{
const char *key = ((const char*) tolua_tostring(tolua_S,2,0));
tolua_pushstring(tolua_S, Nato::Find(key));
}
}
return 0;
#ifndef TOLUA_RELEASE
tolua_lerror:
tolua_error(tolua_S,"#ferror in function 'helperFind'.",&tolua_err);
return 0;
#endif
}
#endif //#ifndef TOLUA_DISABLE
运行的时候,lua调用到c++的方法了,可是lua就是接受不到Nato::Find(key)返回的值。 自个本事是菜鸟,所以就自己做各种打印测试,结果就是接受不到值,可是别的方法怎么就可以呢。 后面在网上找解决办法,没有相关的 , 然后我就去找了别人是怎么调用的。后来才发现了问题。一个很小的地方,如下图:
原来是你往tolua_S里面放入几个值,下面的return就必须是几!!!后面改成return后,果断可以了....
|
请发表评论