Проблема такая: в отладочной версии все работает, в 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 в документе или еще что? Подскажите, как быть, что делать. |