最近將自己的UI工程在Release版下編譯,發(fā)現(xiàn)有部分控件的顏色居然偏黃,想必液晶也不至于老化的那么厲害,隨機(jī)開始將工程加入調(diào)試信息進(jìn)行跟蹤,排除UI工程,及自己寫的lua封裝問題,將問題縮小為:
lua代碼:
t = {}
t.FillColor = 0xFFFFFFFF
foo( t )
在C++中注冊(cè)一個(gè)foo函數(shù),然后獲取table t中的FillColor成員
發(fā)現(xiàn)取得的值居然為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 );
結(jié)果t也是0x80000000
然后將十六進(jìn)制的0xFFFFFFFF換成十進(jìn)制的4294967295,測試結(jié)果正確顯示-1
再使用幾個(gè)樣本測試
0xFF5F5F5F = 4284440415 會(huì)被改成0xFF5F5F00
這個(gè)bug倒是很好解決,將代碼中的十六進(jìn)制數(shù)全換為10進(jìn)制即可。但是為什么只在Release版本發(fā)生呢?
本人使用的是lua 5.1.4 原生