关于vs2005中 va_arg的BUG

Posted on 2007-08-21 23:25 daiybh 阅读(527) 评论(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 :


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理