2013-02-19 4 views
0

CWnd 클래스의 GetParent() 함수를 호출하려고합니다. 예외가 발생할 때마다. 작동중인 스레드에서 함수를 호출하고 있습니다.CWnd :: GetParent 예외가 발생합니다.

이것은 예외를 발생시키는 행입니다. CWnd * parent = this-> GetParent();

"GetParent() -> PostMessage (........);"시도했지만 여전히 예외가 throw됩니다.

이 방법은 CDialog에서 사용하고 있습니다.

CWnd 멤버 m_hWnd가 0x00000000 또는 0x00000001 인 경우가 있습니다. 다른 컴퓨터에서는이 예외가 발생하지 않습니다. 프로젝트 설정이나 코드에 문제가 있습니까?

+0

후 관련 코드 (오류가있는 라인 주위 코드의 5-6 라인) – sashoalm

+0

: 여기

는 VS 2010에서 구현 한 것입니다 CDialog에서 CWnd의 파생물 인 m_hWnd라는 멤버가 있어야합니다. 값이! = 0이면 디버거에 체크인하십시오. –

+0

"작동중인 스레드에서"라고 말합니다. 이것이 AfxBeginThread에 의해 시작된 스레드에서이 CWnd 클래스를 만들었다는 뜻입니까? 그렇다면 [다음 msdn.microsoft.com] (http://msdn.microsoft.com/en-us/library/b807sta6 (v) = vs.100) .aspx) InitInstance 함수를 재정의하려면? 이 작업은 다른 컴퓨터에서 작동하고 @neagoegab은 m_hWnd가 유효한 창이 아님을 지적하므로 CWnd를 만들고 초기화하기 전에 GetParent()가 호출되는 경쟁 조건을 처리 할 수 ​​있습니다. –

답변

2

어설 션을 받았지만 예외는 아닙니다.

귀하의 m_hWnd가 창없는
ASSERT(::IsWindow(m_hWnd)); return CWnd::FromHandle(::GetParent(m_hWnd)); 

...

관련 문제