Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > 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
Цитата
Что это? Моя ошибка или MFC?
Ага, этов все проделки Билла smile .
А почему бы так не попробывать:
Код

class CMaaa : public COleControl
{
public:
CMaaa();
Cmyclass  m_pCmyclss;
….
}

т.е. статическим связыванием

Автор: shedon 10.11.2004, 10:23
Euclid
а где ты удаляешь m_pCmyclss ?

Автор: Euclid 10.11.2004, 20:39
Спасибо!
Я часа через два, после того как вопрос задал, сам понял что ляп допустил.
Нигде не удаляю.
И все-таки непонятно, почему именно HWND = 0?
Если никто не удаляет, то должна быть утечка памяти. Окна дочерние вроде бы должны нормально уничтожиться?

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