一个MDI程序,Release版本使用静态连接库,使用运行库multithreaded出错(打开第2个文档后,运行到CVIEW::OnInitialUpdate()后,不能进入OnDraw(),直接退出程序),使用debug multithreaded则一切正常,请问是什么原因?

解决方案 »

  1.   

    你的debug中可能使用了一些调试语句可以影响程序执行,release中跳过了这些语句,所以出错。
    查查你与调试相关的语句
      

  2.   

    CDocument* CMyApp::OpenDocumentFile(LPCTSTR lpszFileName) 
    {
    CString cs;
    POSITION pos=GetFirstDocTemplatePosition();
    CDocument* cd=NULL;
    while (pos!=NULL)
    {
    CDocTemplate* ct=GetNextDocTemplate(pos);
    ct->GetDocString(cs,CDocTemplate::docName);
    if (cs==_T("MyDoc"))
    {
    cd=ct->OpenDocumentFile(lpszFileName);
    // AfxMessageBox("sdgds");
    }
    }
    return cd;
    }奇怪的现象:在测试Release版本的问题出现位置时发现:如果在上述程序段的位置没有那句注释掉的"AfxMessageBox"语句,则必然出现本主题问题,而简单地去掉注释符号"//",使程序具有一句"AfxMessageBox"语句,则一切恢复正常!
    不解是什么原因?
      

  3.   

    最新测试发现,主题问题在Win98系统下不存在,而即使在Win98下编译连接得到的可执行程序,在Win2000和WinXP中运行照样出问题!难道是操作系统的原因?困惑、不解!什么BUG?请高手指点!
      

  4.   

    我提示一下思路
    AfxMessageBox会使程序停止在这里,你OK后再继续运行
    可能这时,其他线程完成了一些工作。而你AfxMessageBox之后的语句表现可能跟那些工作有关,也就是说,如果你的速度太快,可能不行。建议:将AfxMessageBox改为Sleep(2000)甚至更长试试。目的在于找到问题。
      

  5.   

    肯定是你的debug和release的LINE选项设置的不同
      

  6.   

    将AfxMessageBox改为Sleep(2000)和Sleep(20000)后都不行,但发现Sleep都执行了,然后程序照样什么信息都没有地退出了。Linux2001说的LINE选项我不明白,没用过,能说仔细点吗?