tolua++和wax混合使用时tolua全局对象被覆盖的问题
2014-04-10 14:55
295 查看
最近项目中遇到一个奇怪的问题,由于项目代码逻辑需要用到tolua++里暴露的tolua.cast来实现类型转换,在windows的vs环境下调试式没有问题,但是在ios或者mac上调试xcode工程时,发现tolua变成了一个function,而不是一个对象,很让人奇怪。追查发现在lua引擎启动时,有一个针对IOS或者Mac条件编译宏,当在IOS或Mac下时,会调用wax.h中的wax_start函数,追入到该函数(位于wax.m)文件时,发现其调用的wax_setup调用了一个叫做addGlobals()的函数。继续跟踪addGlobals()函数发现,在其中注册了一个wax.m中的函数,而该函数的名字也恰恰叫做tolua,因此覆盖了在此之前tolua_map.c中的tolua_open函数里注册的tolua模块,导致该上述奇怪问题的产生,解决办法也很简单,wax.m的该注册注释掉或者改下函数名注册,但是会不会引起其他问题暂时还不确定,还有待考察。所以有时候对lua或者js这类语言有时候很容易出现全局函数覆盖的问题,所以最好的编码风格还是注册全局函数或者变量的时候要缀上命名空间前缀才能很大程度上的避免此类问题
相关文章推荐
- Java_类和对象(完美总结)_转载_覆盖和隐藏的区别,覆盖就不能使用了,而隐藏提供全局方法名或者全局变量名还可以使用
- ext3.2.1使用入门: ext对象不存在问题
- Android问题解决之使用字符串&对象空值判断
- Delphi 接口使用中,对象生命周期管理,如何释放需要注意的问题
- 关于mybatis 使用case when 计算BigDecimal 数据返回对象的问题
- 使用Ajax方法提交多个对象数组的问题
- 使用Atl 创建Com对象需要注意的问题
- c语言全局变量使用问题
- 关于使用对象和List时出现的问题和注意事项
- 在ascx中使用js找不到对象问题解决
- Android application对象的使用 全局变量
- jquery 异步事件 (使用异步事件 改变页面全局变量问题)
- 关于:“无法序列化会话状态。在“StateServer”或“SQLServer”模式下,ASP.NET 将序列化会话状态对象,因此不允许使用无法序列化的对象或 MarshalByRef 对象。如果自定义会话状态存储在“Custom”模式下执行了类似的序列化,则适用同样的限制。”的问题
- Java软件低级错误(十 六):使用包装器对象带来的低效问题
- Application对象的使用-数据传递以及内存泄漏问题
- echarts2.0 时间轴搭配力导向图使用+时间轴数据覆盖问题的解决
- 黑马--程序员 父类中有抽象的方法,必须子类建立对象覆盖才可以使用.
- android - Application对象的使用-数据传递以及内存泄漏问题
- Spring使用hibernateTemplate不能save对象的问题.
- Vue.js学习(三):mixins混合对象的使用