Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > Проблема с Release


Автор: Homer 13.5.2006, 19:56
   Проблема такая: в отладочной версии все работает, в Release же накрывается, мол обращается к недействительному адресу в памяти(стандартное виндовское окно вылазит). Вобщем я определил только то, что ошибка происходит, когда я передаю сообщения.
   Впрочем, вот код, по порядку:
 
Код

//начало, посылка сообщения
void dlgFind::OnOK() 
{
...............
    GetParent()->SendMessage(WM_FINDCMD, 0, 0);
}

//сюда приходит - обработчик сообщения WM_FINDCMD от findDlg в классе CMainFrame
void CMainFrame::OnFindCmd()
{
    CMDIChildWnd* chFrame=this->MDIGetActive(FALSE);
    if(!chFrame) return;
    CExemelDoc *doc=(CExemelDoc*)chFrame->GetActiveDocument();
    LPARAM lp=(LPARAM)&findDlg;
    if(doc) doc->brView->SendMessage(WM_FINDCMD, 0, lp);
}

//конец - обработчик сообщения WM_FINDCMD от CMainFrame в классе exBrowserView
void exBrowserView::exFind(WPARAM wPram, LPARAM lParam)
{
    dlgFind *findDlg=(dlgFind*)lParam;
..............
}

//и еще немного кода
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
..................
    findDlg.Create(IDD_FIND, this);
..................
}

//диалог жив во все время существования программы
void CMainFrame::OnEditFind() 
{
    findDlg.ShowWindow(SW_SHOW);
}

//определение указателя на view
void CExemelDoc::SomeInitFunction()
{
..............
    POSITION pos=this->GetFirstViewPosition();
    brView=(exBrowserView*)this->GetNextView(pos);
..............
}


Никогда я еще не встречался с подобного рода глюками, поэтому теряюсь. Ладно при отладке - можно все прочесать, хочешь не хочешь, найдешь ошибку, а тут даже не представляю, что делать. Может я сообщения как то неправильно передаю или неправильно храню указатели на view в документе или еще что?  smile  smile  Подскажите, как быть, что делать. 

Автор: Earnest 15.5.2006, 15:06
У меня только одно предположение: у тебя 6-я студия, а обработчик ты подключаешь так:
ON_MESSAGE(WM_FINDCMD,OnFindCmd). Если это так, то либо перепиши обработчик как положено: LRESULT OnFIndCmd(WPARAM,LPARAM) (у вью тоже), либо используй макрос ON_MESSAGE_VOID...

 

Автор: Homer 15.5.2006, 22:52
  Спасибо, как всегда выручаете, обработчик переписал - все работает. Черт, в который раз убеждаюсь: чем глупее ошибка, тем труднее ее найти ;) Надо следовать стандартам, а не писать отсебятину. 

Автор: Earnest 16.5.2006, 07:44
Переходи на 7ю студию: она такие ошибки не пропускает.
 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)