请教:VC2019树视控件自行排序出错!

这是网上的一段程序,关于树视控件自行排序。在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);
是不是有空指针

img

img

貌似代码没什么问题,报的什么错误啊?

其中一句:CString strItem1 = pmyTreeCtrl->GetItemText((HTREEITEM)lParam1);
错误信息:0x731F83DC (comctl32.dll)处(位于 Radar.exe 中)引发的异常: 0xC0000005: 读取位置 0x57D8F569 时发生访问冲突。

检查发现回调函数里的LPARAM lParam1, LPARAM lParam2两个参量传递值错误,但不知道什么原因。在回调函数里直接用添加项的HTREEITEM参数,就不会出错。

已解决:回调函数里的参量LPARAM lParam1, LPARAM lParam2传递的是待排序项SetItemData的值,而不是其HTREEITEM值。