FormView类里UpdateData(TRUE)老出错。
怎么办

解决方案 »

  1.   

    ASSERT出错? 你在什么地方用了UpdataData? assert出什么错了?
      

  2.   

    判断
    if(pFormView->m_hWnd != NULL) UpdateData(TRUE);
      

  3.   

    估计不是UpdateData本身的错,而是其他的错。贴出错误代码来
      

  4.   

    _AFX_THREAD_STATE* pThreadState = AfxGetThreadState();
    HWND hWndOldLockout = pThreadState->m_hLockoutNotifyWindow;
    ASSERT(hWndOldLockout != m_hWnd);   // must not recurse就是这
    pThreadState->m_hLockoutNotifyWindow = m_hWnd;
      

  5.   

    pFormView->m_hWnd 是不空的
    hWndOldLockout是空的
    hWndOldLockout实什么东西
    上面是MFC代码
      

  6.   

    BOOL CWnd::UpdateData(BOOL bSaveAndValidate)
    {
    ASSERT(::IsWindow(m_hWnd)); // calling UpdateData before DoModal? CDataExchange dx(this, bSaveAndValidate); // prevent control notifications from being dispatched during UpdateData
    _AFX_THREAD_STATE* pThreadState = AfxGetThreadState();
    HWND hWndOldLockout = pThreadState->m_hLockoutNotifyWindow;
    ASSERT(hWndOldLockout != m_hWnd);   // must not recurse
    pThreadState->m_hLockoutNotifyWindow = m_hWnd; BOOL bOK = FALSE;       // assume failure
    TRY
    {
    DoDataExchange(&dx);
    bOK = TRUE;         // it worked
    }
    CATCH(CUserException, e)
    {
    // validation failed - user already alerted, fall through
    ASSERT(!bOK);
    // Note: DELETE_EXCEPTION_(e) not required
    }
    AND_CATCH_ALL(e)
    {
    // validation failed due to OOM or other resource failure
    e->ReportError(MB_ICONEXCLAMATION, AFX_IDP_INTERNAL_FAILURE);
    ASSERT(!bOK);
    DELETE_EXCEPTION(e);
    }
    END_CATCH_ALL pThreadState->m_hLockoutNotifyWindow = hWndOldLockout;
    return bOK;
    }
      

  7.   

    你在什么地方调用了UpdataData?
      

  8.   

    换成以下语句试一下:
    if(pFormView->GetSafeHwnd()) UpdateData(TRUE);
      

  9.   

    int CTempReg::ToComThread()
    {
    this->UpdateData(TRUE);
    return 1
    }
    ToComThread是自定义的
    调用ToComThread时候CTempReg已建立
      

  10.   

    上面粘错了HWND CDataExchange::PrepareCtrl(int nIDC)
    {
    ASSERT(nIDC != 0);
    ASSERT(nIDC != -1); // not allowed
    HWND hWndCtrl;
    m_pDlgWnd->GetDlgItem(nIDC, &hWndCtrl);
    if (hWndCtrl == NULL)是这出错hWndCtrl==NULL
    {
    TRACE1("Error: no data exchange control with ID 0x%04X.\n", nIDC);
    ASSERT(FALSE);
    AfxThrowNotSupportedException();
    }
    m_hWndLastControl = hWndCtrl;
    m_bEditLastControl = FALSE; // not an edit item by default
    ASSERT(hWndCtrl != NULL);   // never return NULL handle
    return hWndCtrl;
    }
      

  11.   

    估计是你的窗口没有生成或已经销毁了,这种情况下是不能调用UpdateData()的
      

  12.   

    if(pFormView->GetSafeHwnd()) UpdateData(TRUE);
    是不行的
      

  13.   

    谢谢大家的关心,我已找到原因了
    是DDX_Text函数
    用到了对话筐中没有的资源.
    以前建立的资源删了,但DDX_Text函数不会自动删
    给分了