在另一个类访问CListView派生类
CMainFrame *pFrame=(CMainFrame*)(AfxGetApp()->m_pMainWnd);   
CSignallingPassageView* pView=(CSignallingPassageView*)(pFrame->GetActiveView());
pView->UpDateATrunkChListCtrl(m_ATrkCh,m_nTotMaxCh);CSignallingPassageView类的UpDateATrunkChListCtrl函数如下:
void CSignallingPassageView::UpDateATrunkChListCtrl(TRUNK_STRUCT *pATrkCh,int nTotMaxCh)
{
CListCtrl& m_cListCtrl=this->GetListCtrl();
CString state;
    char tmpstr[30];
int nIndex;
nIndex=0; for (int i=0;i<nTotMaxCh;i++)
{
if (pATrkCh[i].EnCalled)
{
switch (pATrkCh[i].Step)
{
case TRK_IDLE: state="Channel idle"; break;
case TRK_CALLIN: state="Incoming calls"; break;
case TRK_CALLOUTWAIT: state="Outgoing calls waiting"; break;
case TRK_CALLOUT: state="Outbound Telephone"; break;
default: state = "Undefined"; break;
}
AfxMessageBox(state);
m_cListCtrl.GetItemText( nIndex,1,tmpstr,29);
AfxMessageBox(tmpstr);
/*if (state!=tmpstr) 
m_cListCtrl.SetItemText( nIndex,0,state.GetBuffer(30));
m_cListCtrl.GetItemText(nIndex,1,tmpstr,29);*/
nIndex = nIndex + 1;
}
}
}
到这里就指针错误了m_cListCtrl.GetItemText( nIndex,1,tmpstr,29);---------------------------
TelCallPlatform.exe - 应用程序错误
---------------------------
"0x5f410ade" 指令引用的 "0x00000020" 内存。该内存不能为 "read"。
要终止程序,请单击“确定”。
要调试程序,请单击“取消”。
---------------------------
确定   取消   
---------------------------各位给看看,这个问题搞得我头都大了,对MFC不是很熟,也努力在学习,大虾们看看咯。。

解决方案 »

  1.   

    pFrame->GetActiveView(),你确定你获得的这个view就是CSignallingPassageView吗
      

  2.   

    m_cListCtrl.GetItemText( nIndex,1,tmpstr,29);
    这个对象m_cListCtrl是否有效呢?你Debug下看一下就会很清楚了
      

  3.   

    m_cListCtrl.GetItemText( nIndex,1,tmpstr,29);
    你把29改成30看看
    同时,建议你用sizeof(tmpstr)
      

  4.   

    现在是能肯定的是m_cListCtrl是无效的。
    要怎么访问才能是有效
      

  5.   

    楼主用debug看看m_cListCtrl获取正确吗?
    可以在CListCtrl& m_cListCtrl=this->GetListCtrl();上面放个断点
      

  6.   

    试试在头文件关联一个变量,CListCtrl m_cListCtrl;
    然后在cpp文件DoDataExchange里面添加DDX_Control(pDX, IDC_LIST?, m_cListCtrl);
      

  7.   

    你代码应该没问题,估计你这个CSignallingPassageView类还没有pMainFrame->UpdateWindow();之后你就提前访问了。
      

  8.   

    你代码应该没问题,估计你这个CSignallingPassageView类还没有pMainFrame->UpdateWindow();之后你就提前访问了。