2013-02-19 57 views
0

我想調用CWnd類的函數GetParent()。每次拋出異常。 我正在從工作線程調用該函數。CWnd :: GetParent導致異常

這是導致異常的行: CWnd * parent = this-> GetParent();我也試過「GetParent() - > PostMessage(........);」,但仍然拋出異常。

我在CDialog中使用此方法。

我注意到CWnd成員m_hWnd有時是0x00000000或0x00000001。 在另一臺電腦中,我沒有看到這個例外。 這是在項目設置或我的代碼中的問題?

+0

後的相關代碼(5-6行代碼與周圍的誤差線) – sashoalm 2013-02-19 12:30:33

+0

由於CDialog派生自CWnd,它必須有一個名爲m_hWnd的成員,如果值爲!= 0,請在調試器中檢入。 – 2013-02-19 12:35:43

+0

您說:「來自工作線程。這是否意味着你已經在AfxBeginThread啓動的線程上創建了這個CWnd類,如果有的話[你遵循msdn.microsoft.com](http://msdn.microsoft.com/en-us/library/b807sta6(v = vs.100).aspx)重寫InitInstance函數?由於這可以在另一臺計算機上運行,​​並且@neagoegab指出你的m_hWnd不是一個有效的窗口,所以你可能正在處理一個競爭條件,在創建和初始化CWnd之前調用GetParent()。 – 2013-02-19 16:07:36

回答

2

您收到一個斷言,而不是一個例外。

這是自2010年VS實現:

ASSERT(::IsWindow(m_hWnd)); return CWnd::FromHandle(::GetParent(m_hWnd)); 

你m_hWnd不是窗口...