Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Visual C++/MFC/WTL > Ошибка hwnd = 0 в AfxWndProc |
Автор: Euclid 9.11.2004, 21:10 |
Делаю компоненет Active X в MFC. Примерно так: в простом EXE отладил класс Cmyclass { .... BOOL Create(const RECT& rect, CWnd* parent); .... } потом в проекте MFC Active X делаю код class CMaaa : public COleControl { public: CMaaa(); Cmyclass * m_pCmyclss; …. } И в процедуре CMaaa::OnCreate(LPCREATESTRUCT lpCreateStruct) вызываю m_pCmyclss = new Cmyclass; CRect rect; GetClientRect(rect); m_pCmyclss ->Create(rect, this); то есть родитель окна моего класса – сам контрол ( !?? так ли это ? ) пока контрол больше ничего не делает В VB 6.0 в форму кладу контрол И почти всегда при закрытии VB а иногда и раньше VB падает. Удается увидеть, что падает в cmdtarg.cpp line 52 или раньше в wincore.cpp line 365. В wincore.cpp line 365 выполняется проверка AfxWndProc(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam) { // special message which identifies the window as using AfxWndProc if (nMsg == WM_QUERYAFXWNDPROC) return 1; // all other messages route through message map CWnd* pWnd = CWnd::FromHandlePermanent(hWnd); ASSERT(pWnd != NULL); -------- это и есть line 365 !!!!!!! ASSERT(pWnd->m_hWnd == hWnd); return AfxCallWndProc(pWnd, hWnd, nMsg, wParam, lParam); } Что это? Моя ошибка или MFC? |
Автор: bel_nikita 10.11.2004, 09:42 | ||||
![]() А почему бы так не попробывать:
т.е. статическим связыванием |
Автор: shedon 10.11.2004, 10:23 |
Euclid а где ты удаляешь m_pCmyclss ? |
Автор: Euclid 10.11.2004, 20:39 |
Спасибо! Я часа через два, после того как вопрос задал, сам понял что ляп допустил. Нигде не удаляю. И все-таки непонятно, почему именно HWND = 0? Если никто не удаляет, то должна быть утечка памяти. Окна дочерние вроде бы должны нормально уничтожиться? |