这是网上的一段程序,关于树视控件自行排序。在VS2010能正常调试运行,但在VS2019调试时出错!直接运行(不调试)正常。
int CALLBACK MyCompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
//把该函数换成自己的规则
CTreeCtrl* pmyTreeCtrl = (CTreeCtrl*)lParamSort;
CString strItem1 = pmyTreeCtrl->GetItemText((HTREEITEM)lParam1);
CString strItem2 = pmyTreeCtrl->GetItemText((HTREEITEM)lParam2);
return strItem2.Compare(strItem1);
}
TVSORTCB tvs;
tvs.hParent = TVI_ROOT;
tvs.lpfnCompare = MyCompareProc;
tvs.lParam = (LPARAM)&m_TreeCtrl;
m_TreeCtrl.SortChildrenCB(&tvs);
其中一句出错:CString strItem1 = pmyTreeCtrl->GetItemText((HTREEITEM)lParam1);
错误信息:0x731F83DC (comctl32.dll)处(位于 Radar.exe 中)引发的异常: 0xC0000005: 读取位置 0x57D8F569 时发生访问冲突。
加个断点调试下,看看
CString strItem1 = pmyTreeCtrl->GetItemText((HTREEITEM) lParam1);
是不是有空指针
貌似代码没什么问题,报的什么错误啊?
其中一句:CString strItem1 = pmyTreeCtrl->GetItemText((HTREEITEM)lParam1);
错误信息:0x731F83DC (comctl32.dll)处(位于 Radar.exe 中)引发的异常: 0xC0000005: 读取位置 0x57D8F569 时发生访问冲突。
检查发现回调函数里的LPARAM lParam1, LPARAM lParam2两个参量传递值错误,但不知道什么原因。在回调函数里直接用添加项的HTREEITEM参数,就不会出错。
已解决:回调函数里的参量LPARAM lParam1, LPARAM lParam2传递的是待排序项SetItemData的值,而不是其HTREEITEM值。