构造函数:
CTrain::CTrain(CTestDlg *pDlg) : m_pDlg(pDlg)
{}
成员函数:
void CTrain::Display(CListBox *TestInfo)
{
TestInfo->AddString("hello");
}void CTrain::Process()
{
Display(&(m_pDlg->m_TestInfo));}CTestDlg类中调用:
CTestDlg *Dlg = new CTestDlg();
CTrain Train(Dlg);
Train.Process();会出异常:_AFXWIN_INLINE int CListBox::InsertString(int nIndex, LPCTSTR lpszItem)
{ ASSERT(::IsWindow(m_hWnd)); return (int)::SendMessage(m_hWnd, LB_INSERTSTRING, nIndex, (LPARAM)lpszItem); }

解决方案 »

  1.   

    应该是Dlg的设备环境还不存在,所以不能addstring;先让它create()试试
      

  2.   

    能不能先获得当前对话框的指针,再赋给Dlg呢?
      

  3.   

    你这样CTestDlg *Dlg = new CTestDlg()的话对话框只是有了一块地方而已,但addstring要可能要对图形设备环境操作,就这样是没有的,create()以后就有了;你看看行不行?
      

  4.   

    BOOL CDialog::Create(LPCTSTR lpszTemplateName, CWnd* pParentWnd)
    {
    ASSERT(HIWORD(lpszTemplateName) == 0 ||
    AfxIsValidString(lpszTemplateName));
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~异常
    m_lpszTemplateName = lpszTemplateName;  // used for help