CMyApp::InitInstance()里面
先CMyDlg dlg;
创建了dlg,但这时不想DoModal了,想要退出,于是我就return FALSE;这时程序就会出错.但是如果在CMyDlg dlg;之前我就用return FALSE;这样就能成功退出.但现在一定要先CMyDlg dlg;那这样的话该如何不DoModal也成功退出?谢谢!

解决方案 »

  1.   

    错误的原因是你有这个语句:
    m_pMainWnd = &dlg;
    将dlg的指针赋值给主框架了,在这个语句之前return就没有问题如果一定要在这个语句之后,而又在DoModal之前,只需要在return前增加语句:
    m_pMainWnd = NULL;
    就可以了
      

  2.   

    呵呵 和我想的一样 
    就这句
    m_pMainWnd = &dlg;
      

  3.   

    哦,原来是这样,我试了一下fengqinggao(风清高)说的是正确的,能不能再顺便问一下,这是为什么呢?有理由吗?谢谢
      

  4.   

    我想应该是这样:
    语句CMyDlg dlg;定义了一个对象,该对象是可以自己销毁的,但是将它的指针赋值给m_pMainWnd后,如果直接return的话,dlg被销毁,但是其指针还保留在m_pMainWnd中,是一个野指针了,但是系统可能还会用它做一些清理工作,也就出错了,将m_pMainWnd赋值为NULL后,就不存在野指针的问题了