2008年6月12日 星期四

build 中文版 WinCE OS 卻無法執行導航軟體

build 中文版 WinCE OS 進行移植
卻無法執行導航軟體
發現是路徑的path抓錯

CMap是微軟設計用來 manipulate *.ini檔

http://msdn.microsoft.com/en-us/library/s897094z(VS.80).aspx

Trace到 CMap::GetLine
Debug的快慢
在碰到換行
資料可以去正常取出到m_pData
但是處理到m_Line的時候卻會變成NULL

如果Debug慢一點
也就是
while (m_Offset + len < m_Size
&& '\r' != m_pData[m_Offset+len] && '\n' != m_pData[m_Offset+len])
++len;
(此行在抓取檔案內容)
run久一些

m_Line的data就會正常 不會是NULL

還不清楚關係何在

將*.ini裡面
每行之間 不要換行
也是一個解決方法 (至少Data不會抓錯)


CMap::GetLine 似乎不夠robust

/************************************
// Read a line. We return a ptr and not a reference because we use a
// return value of NULL to signify EOF.
const CLine* CMap::GetLine()
{
DWORD len = 0;
// Look for the end of the line.
while (m_Offset + len < m_Size
&& '\r' != m_pData[m_Offset+len] && '\n' != m_pData[m_Offset+len])
++len;
DWORD len2 = 0;
// Now push the internal offset past the newline.
// (We assume \r\n pairs are always in this order)
if (m_Offset + len + len2 < m_Size && '\r' ==
m_pData[m_Offset+len+len2])
++len2;
if (m_Offset + len + len2 < m_Size && '\n' ==
m_pData[m_Offset+len+len2])
++len2;
if (0 == len + len2)
return NULL;
m_Line.Set(&m_pData[m_Offset], len, m_bUnicode);
m_Offset += len + len2;
return &m_Line;
}
*************************************/

透過Facebook分享

沒有留言: