Posted on 2007-08-21 23:25
daiybh 閱讀(560)
評論(0) 編輯 收藏 引用 所屬分類:
vs Studio IDE
今天在VS2005里用到了CReportCtrl 類。
發現 用到 int CReportCtrl::InsertItem(int nIndex, LPCTSTR pszText, ...) 時。如果可變參數個數(LPCTSTR pszText)的小于 開始設置listctrl的列數 則會報錯。
幾經查看才發現是 va_arg 惹的禍。微軟網站上給出了解釋,FIX: The va_arg function returns an incorrect value in a Visual C++ 2005 application
文章里說 wait for the next Visual Studio 2005 service pack ,but 我裝了sp1 還是有問題,難道是我裝的SP有問題。。
在這給出InsertItem實現
int CReportCtrl::InsertItem(int nIndex, LPCTSTR pszText, ...)
{
const int iIndex = CListCtrl::InsertItem(nIndex, pszText);
if (!_IsValidIndex(iIndex))
return iIndex;
CStringArray arr;
arr.Add(pszText);
va_list list;
va_start(list, pszText);
for(int iColumn = 1; iColumn < GetColumnCount(); iColumn++)
{
LPCTSTR lpsz = va_arg(list, LPCTSTR); //在這產生問題。
CString str;
str = (lpsz==NULL)?_T(""):lpsz;
//下面是對上面的展開 否則調試時不能定位到這里
if (lpsz == NULL)
str = _T("") ;
else
str =CString(lpsz);
arr.Add(str);
CListCtrl::SetItemText(iIndex, iColumn, str);
}
va_end(list);
_AssignNewItemData(iIndex, arr.GetData(), arr.GetSize());
return iIndex;
}
有啥辦法能解決呢。思考ing......
Technorati : vs2005 va_arg