战魂小筑

讨论群:309800774 知乎关注:http://zhihu.com/people/sunicdavy 开源项目:https://github.com/davyxu

   :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  251 随笔 :: 0 文章 :: 506 评论 :: 0 Trackbacks

最近将自己的UI工程在Release版下编译,发现有部分控件的颜色居然偏黄,想必液晶也不至于老化的那么厉害,随机开始将工程加入调试信息进行跟踪,排除UI工程,及自己写的lua封装问题,将问题缩小为:

lua代码:

t = {}

t.FillColor = 0xFFFFFFFF

foo( t )

在C++中注册一个foo函数,然后获取table t中的FillColor成员

发现取得的值居然为0x80000000

 

使用lua c api测试代码

lua_newtable( L );
lua_setglobal( L, "t");

lua_getglobal( L, "t");
lua_pushstring(L,"FillColor");
lua_pushinteger( L, 0xffffffff );
lua_pushinteger( L, -1 );
lua_settable( L, -3 );

lua_getglobal( L, "t");
lua_pushstring( L, "FillColor");
lua_gettable( L, -2 );
int t = lua_tointeger( L, -1 );

结果t也是0x80000000

 

然后将十六进制的0xFFFFFFFF换成十进制的4294967295,测试结果正确显示-1

再使用几个样本测试

0xFF5F5F5F = 4284440415 会被改成0xFF5F5F00

 

这个bug倒是很好解决,将代码中的十六进制数全换为10进制即可。但是为什么只在Release版本发生呢?

本人使用的是lua 5.1.4 原生

posted on 2010-02-04 10:59 战魂小筑 阅读(1486) 评论(2)  编辑 收藏 引用 所属分类: 脚本技术程序调试技术

评论

# re: Lua在Release版本下的一个bug 2010-11-04 16:46 test
lua_getglobal( L, "t");
lua_pushstring(L,"FillColor");
lua_pushinteger( L, 0xffffffff );
lua_pushinteger( L, -1 );
lua_settable( L, -3 ); // 操作哪个table???

settable的语法是:
push table
push key
push value
lua_settable l,-3
  回复  更多评论
  

# re: Lua在Release版本下的一个bug 2010-11-04 16:50 test
@test
额。我看错。。。注释掉就行了。也不加个开关,误解了。
不过我这边正常啊,0xFF5F5F5F也正常  回复  更多评论
  


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理