最近将自己的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 原生