有两个dialog1,dialog2,从dialog1中打开dialog2,然后从dialog2中打开dialog1,并销毁dialog2. 实现如下:
dialog1.cppvoid Button_oK()
{
   Cdialog2 dlg2;
   dlg2.DoModel;
 }dialog2.cppvoid Button_Back()
{
    Cdialog1 dlg1;
   dlg1.DoModel;
   Cdialog2 dlg2;  
   dlg2.DestroyWindow();
}
执行时,dialog1打开2没问题,2返回1没问题,当1再次试图打开2时,程序中断。
中断信息:
BOOL AFXAPI AfxOleInit()
{
_AFX_THREAD_STATE* pState = AfxGetThreadState();
ASSERT(!pState->m_bNeedTerm);    // calling it twice? // Special case DLL context to assume that the calling app initializes OLE.
// For DLLs where this is not the case, those DLLs will need to initialize
// OLE for themselves via OleInitialize.  This is done since MFC cannot provide
// automatic uninitialize for DLLs because it is not valid to shutdown OLE
// during a DLL_PROCESS_DETACH.
if (afxContextIsDLL)
{
pState->m_bNeedTerm = -1;  // -1 is a special flag
return TRUE;
}
}

解决方案 »

  1.   

    从dialog1中打开dialog2,并销毁然dialog1,后从dialog2中打开dialog1,并销毁dialog2
    这样可以,不过我按了26后程序退出,不知为什么
      

  2.   

    能告诉我你的具体代码吗?我试了不行,同样的问题。使用destroyWindow()销毁吗?
    dialog1.cppvoid Button_oK()
    {
       Cdialog2 dlg2;
       dlg2.DoModel;
       Cdialog1 dlg1;
       dlg1.DestoryWindow();
     }dialog2.cppvoid Button_Back()
    {
        Cdialog1 dlg1;
       dlg1.DoModel;
       Cdialog2 dlg2;  
       dlg2.DestroyWindow();
    }
      

  3.   

    我用DestroyWindow();也是二十几次才中断
      

  4.   

    dialog1.cppvoid Button_oK()
    {
       Cdialog2 dlg2;
       dlg2.DoModel;
       DestoryWindow();
     }dialog2.cppvoid Button_Back()
    {
        Cdialog1 dlg1;
       dlg1.DoModel;
       DestroyWindow();
    }应该这样吧
      

  5.   

    还是不行,你的dialog2的初始化部分是怎么样的?因为我的事我自己家的所以不知道是不是那里的问题?
      

  6.   

    我的是这样的
    BOOL CSecondView::OnInitDialog()
    {
    CDialog::OnInitDialog();
    m_Ok.EnableWindow(FALSE);
    return TRUE;
    }
      

  7.   

    在行DestoryWindow();设断点不执行
    在dialog2.cppvoid Button_Back()
    {
        Cdialog1 dlg1;
       dlg1.DoModel;
       DestroyWindow();
    }中应该是dlg1关闭才执行DestroyWindow();吧
    那又怎么会退出呢……
      

  8.   

    我没有给按钮加变量也没有重载OnInitDialog()
      

  9.   

    我的dialog1的按钮有变量,dialog2没有。你怎么绕开oninitdialog(),的,我得dialog2在没有执行oninitdialog()适合加上oninitdialog()是错误是一样的。
      

  10.   

    我的意思是你怎么做到不重载OnInitDialog()的。
    我的dialog2原本是没有这个函数的。是我发现了这个错误后加上的,但错误依旧相同。
      

  11.   

    把DestroyWindow()换成 CDialog::OnOk()试试
      

  12.   

    还是不行,我总觉得是第二个dialog2的初始化部分的问题。因为dialog1是先打开的,然后执行:
    void CTest1Dlg::OnOK() {
    // TODO: Add extra validation here

    CDialog::OnOK();
      
             f_add = tem;
             CSecondView dlg2;
    dlg2.DoModal();
        
    // DestroyWindow();}在dialog2中执行:
    void CSecondView::OnButton1() {
    // TODO: Add your control notification handler code here
        
    CDialog::OnOK();
    isfirst = 1;
    CTest1Dlg dlg3;
    dlg3.DoModal();
    CDialog::OnOK();
        //DestroyWindow();

    }
    也可正常打开dialog1。可再执行一次CTest1Dlg::OnOK(),就报错了,无论用destroyWindow(),CloseWindow(),CDialog::OnOK()错误都一样。
      

  13.   

    dialog2的初始化部分。有与没有问题一样。
    BOOL CSecondView::OnInitDialog()
    {

    if (isfirst == 0)
    {

    CDialog::OnInitDialog();
    m_Ok.EnableWindow(FALSE);
    }
    return TRUE;

    }