环境:cocos2dx 3.2 + VS2012 + ndk r9b
绑定方法是按照tolua下的README做的,新增了一个ini和一个py文件,仿造cocos的相关文件写的。可以正常绑定,查看绑定后的cpp和hpp文件,也没什么问题。
在appdelegate里注册自动绑定的内容,register_all_game_custom。
以前写过一些测试代码,可以正常执行程序,今天将部分正式代码引入到项目中绑定,程序崩溃。对比测试代码和正式代码,发现问题出在名称空间上,正式代码有自己的名称空间。
崩溃中断后,发现程序运行到 tolua_map.c 的 tolua_module方法(line:472 lua_rawget(L,-2);)时崩溃。(如无名称空间,则会跳过此段代码)。
往前调试,发现进入到 register_all_game_custom 后执行tolua_open,在lua_gettop时,此时返回的值为0,而对比cocos自己的register_all相关的注册方法,返回值都为1。
之后我查看了一下luaStack在init之后做过什么操作,发现在LuaEngine的init里分别执行过executeScriptFile(“DeprecatedEnum.lua”); executeScriptFile(“DeprecatedClass.lua”); executeScriptFile(“Deprecated.lua”);
而这三个executeScriptFile在执行stack的executeScriptFile后,均会执行stack的clean,这个会直接调用 lua_settop(_state, 0),以至于之后调用lua_rawget(L,-2)崩溃。
我现在是将executeScriptFile里的stack->clean注掉了,目前还没遇到什么问题,但我觉得这么处理估计会有坑。。
请问有什么好的解决办法么?