MFC Debug Assertion Failed Error : winocc.cpp Line 331
2011. 9. 12. 16:04 - 청년코더(Debug Assertion Failed Error는 굉장히 광범위한 에러입니다.
본 게시물은 VisualStudio 6.0 서비스팩을 설치하지 않았을 때 발생하는 에러입니다.
해당사항이 아닌 분들은 시간을 아끼심이...)
황당하게 에러가 발생할 때가 있다
뭐냐~ -ㅅ-)
책을 따라하다 예제 그대로 따라해도,
저자가 하란대로 했는데 도대체 뭐가 문젠지...
아주 이젠 대놓고, 어플위자드로 프로젝트를 생성하고 바로 실행해도 이 에러가 난다.
Visual Studio 6.0
![](http://pds10.egloos.com/pds/200905/29/42/a0118142_4a1f36e97bb51.jpg)
문제의 winocc.cpp 331라인은 다음과 같다
329: CWnd* CWnd::SetFocus()
330: {
331: ASSERT(::IsWindow(m_hWnd));
332: if (m_pCtrlSite == NULL)
333: return CWnd::FromHandle(::SetFocus(m_hWnd));
334: else
335: return m_pCtrlSite->SetFocus();
336: }
m_hWnd 값이 Null값으로 리턴되는 것 같은데
위에 SetFocus()를 호출하는 부분은
MainFrm.cpp의
void CMainFrame::OnSetFocus(CWnd* pOldWnd)
{
m_wndView.SetFocus(); <- 여기
}
주석처릴 한다고 해도, 정상적인 윈도우가 생성되지 않으므로, 난감하다.
프로젝트 설정에 문제가 있나싶어, 다양하게 실험을 해 본결과..
![](http://pds12.egloos.com/pds/200905/29/42/a0118142_4a1f39b1d62a0.jpg)
한가지 상황에서 위의 에러가 발생하는 것을 알게되었다.
![](http://pds10.egloos.com/pds/200905/29/42/a0118142_4a1f39f5eec2f.jpg)
에러가 나는 조합
어플타입을 Single Document로 두고, Doc/View 구조를 지원하지 않도록 해제한다.
다음,
![](http://pds10.egloos.com/pds/200905/29/42/a0118142_4a1f3a5cd2425.jpg)
이 부분,
Docking Toolbar와 Initial Status bar 모두 해제 시킨다.
그럴경우 위의 에러가 발생하며,
만약 Single이 아닌 Multiple로 바꾼다거나
Doc/View 지원을 선택하거나
도킹툴바를 선택하거나
이니셜 상태바를 선택하더라도
에러를 피할 수 있다.
해결방안
결론 : 비주얼 C++ 6.0은 서비스팩을 설치하지 않으면 버그로 이런 에러가 발생한다.
최신 서비스팩을 설치하면 문제가 해결되지만, 찾고 어쩌고 할 시간이 없으시다면
다음의 코드를 추가하면 된다.
클래스위자드 실행 (Ctrl+W)
Class Name을 CMainFrame으로 두고 Messages에 WM_CREATE를 추가한다
추가후 MainFrm.cpp 파일의 OnCreate합수가 다음이 되도록 코딩한다
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
if(!m_wndView.Create(NULL, NULL, AFX_WS_DEFAULT_VIEW,
CRect(0,0,0,0), this, AFX_IDW_PANE_FIRST, NULL))
{
TRACE("Failed to create view window\n");
return -1;
}
return 0;
}
다시 컴파일하면, 문제가 해결된 것을 볼 수 있다.
'프로그래밍 > MFC' 카테고리의 다른 글
MFC :: 키보드 입력 관련 (0) | 2011.09.12 |
---|---|
한글 입력 관련 윈도우 메시지 (0) | 2011.09.12 |
MFC :: MFC 에서 RTTI 구현 원리 (0) | 2011.08.28 |
MFC :: ASSERT_VALID 매크로 (0) | 2011.08.28 |
Visual C++ DLL (Dynamic Link Library) (0) | 2011.08.18 |
댓글 로드 중…