dll中使用以下代码,报错“内存不能为read”,不知道是不是销毁的方式有问题呢!
void CUpdateDlg::OnClose() 
{
// TODO: Add your message handler code here and/or call default
DestroyWindow();
CDialog::OnClose();
}

解决方案 »

  1.   

    先CDialog::OnClose(); 
    再DestroyWindow();
      

  2.   

    DestroyWindow(); 会被主动调用,不需要你显式的这样调用,即使想显示的调用,最好判断一下m_hWnd是否为NULL,如果为NULL,说明DestroyWindow(); 已经调用过了
      

  3.   

    先CDialog::OnClose(); 
    再DestroyWindow();还是不行DestroyWindow(); 会被主动调用?应该没有的,关闭对话框后,重新打开,看到对话框中的进度条还在继续走
      

  4.   

    OnNcDestroy
    {
    delete this;
    }
    重载OnNcDestroy,并注释掉原来的调用。
      

  5.   


    void CUpdateDlg::OnClose() 

    // TODO: Add your message handler code here and/or call default 
    DestroyWindow(); 
    //CDialog::OnClose(); 
    } CDialog::OnClose(); 注释掉。
      

  6.   

    OnClose就是要这样写,估计你还在其它地方做了处理,你调试运行程序,出错时看调用堆栈中的信息,找出引起错误的代码。
      

  7.   

    不正确啊
    重载OnNcDestroy和CDialog::OnClose(); 注释掉。 都不行
    我的对话框是CUpdateDlg *uDlg;uDlg = new  CUpdateDlg();出来的
      

  8.   

    DestroyWindow(); 
    就是这个出的错,去掉这个就没问题,但是对话框不能真正的销毁
      

  9.   

    正式线程没有结束的原因。但是还是有问题的,关闭是销毁了对话框,但是在打开的时候就afxwin2.inl 错误
      

  10.   

    DestroyWindow会产生很多消息,看看你是不是响应了其它相关消息或者重载了相关函数。如果是用new构造的非模态对话框,通常的做法是:
    响应WM_CLOSE消息,执行DestroyWindow;重载PostNcDestroy函数,delete this;如果需要退出消息循环,则响应WM_DESTROY消息,PostQuitMessage。
      

  11.   

    cnzdgs:是不是我重载了WindowProc的原因呢,给出一个代码吧,刚接触vc,有很多东西不理解
      

  12.   

    按照cnzdgs的方法,连主程序一起关闭了LRESULT CUpdateDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
    {
    switch(message)
     { 
          ....
         case WM_DESTROY:
    PostQuitMessage(0);
      break; 
       }}
    void CUpdateDlg::PostNcDestroy() 
    {
    // TODO: Add your specialized code here and/or call the base class

    CDialog::PostNcDestroy();
    delete this; 
    }
    void CUpdateDlg::OnClose() 
    {
    // TODO: Add your message handler code here and/or call default
    CDialog::OnClose();
    DestroyWindow(); 
    }
      

  13.   

    PostQuitMessage是你打算退出消息循环时才需要的,如果还有其它窗口不想退出,就不要加这行代码了。
      

  14.   

    对非模式对话框,需要重载OnCancel 和 OnOK 方法,里面只要调用DestroyWindow();
    如果想把new出来的dlg类对象在窗口关闭后自动释放掉,则再重载PostNcDestroy函数,调用delete this,也可以不重载这个函数,手动来控制dlg类对象
      

  15.   

    啊啊,郁闷啊
    要是不加PostQuitMessage的话,可以关闭,但是重新打开对话框就会出错的,
      

  16.   

    “重新打开对话框”是怎么打开?已经delete的对象就不存在了,再使用要重新new。
      

  17.   

    晕,终于知道什么原因了,原来是dll加载后没有释放