大家看看我这代码哪错了,运行不了报错!
头文件中:
LPTVSORTCB pSort;
CTreeCtrl m_Tree;//控制变量
static int CALLBACK MyCompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort);void CbcDlg::OnBnClickedButton1()
{
pSort->hParent=TVI_ROOT;
pSort->lParam=(LPARAM)&m_Tree;
pSort->lpfnCompare=MyCompareProc;
m_Tree.SortChildrenCB(pSort);
}
int CALLBACK CbcDlg::MyCompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
CTreeCtrl* pmyTreeCtrl = (CTreeCtrl*) lParamSort;
CString strItem1 = pmyTreeCtrl->GetItemText((HTREEITEM) lParam1);
CString strItem2 = pmyTreeCtrl->GetItemText((HTREEITEM) lParam2);
return strcmp(strItem2, strItem1);
}
头文件中:
LPTVSORTCB pSort;
CTreeCtrl m_Tree;//控制变量
static int CALLBACK MyCompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort);void CbcDlg::OnBnClickedButton1()
{
pSort->hParent=TVI_ROOT;
pSort->lParam=(LPARAM)&m_Tree;
pSort->lpfnCompare=MyCompareProc;
m_Tree.SortChildrenCB(pSort);
}
int CALLBACK CbcDlg::MyCompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
CTreeCtrl* pmyTreeCtrl = (CTreeCtrl*) lParamSort;
CString strItem1 = pmyTreeCtrl->GetItemText((HTREEITEM) lParam1);
CString strItem2 = pmyTreeCtrl->GetItemText((HTREEITEM) lParam2);
return strcmp(strItem2, strItem1);
}
CString类型就是宽字符WCHAR,而strcmp要求两个参数是多字节,因此需要使用W2A宏进行转化:
CbcDlg::MyCompareProc方法修改如下:
int CALLBACK CTreeSortDlg::MyCompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
CTreeCtrl* pmyTreeCtrl = (CTreeCtrl*) lParamSort;
CString strItem1 = pmyTreeCtrl-> GetItemText((HTREEITEM) lParam1);
CString strItem2 = pmyTreeCtrl-> GetItemText((HTREEITEM) lParam2);
LPTSTR lptstr1=strItem1.GetBuffer();//取出CString缓冲区
LPTSTR lptstr2=strItem2.GetBuffer();
USES_CONVERSION; //使用ATL自带的转化宏
const char* pch1=W2A(lptstr1); //将宽字符转化成多字节
const char* pch2=W2A(lptstr2); //
return strcmp(pch1, pch2);
}
对于LPTSTR类型,它在Unicode环境中是LPWSTR类型,在多字节环境中是LPSTR类型。
yy.exe 中的 0x00443b6c 处最可能的异常: 0xC0000005: 写入位置 0xcccccccc 时发生访问冲突
报错中断出现在这函数中!
void CbcDlg::OnBnClickedButton1()
{
pSort-> hParent=TVI_ROOT;
pSort-> lParam=(LPARAM)&m_Tree;
pSort-> lpfnCompare=MyCompareProc;
m_Tree.SortChildrenCB(pSort);
}
是哪出了问题,大家救救我啊!
郁闷了哈!
一直是在那中断!
不知道哪出了问题了哈!