0

私はVC++6.0でRTシミュレーターを実行しています。Open Architecture Computer(OAC、フライト中のバスコントローラー)がオンになっていない状態で実行されると、プログラムは正しく実行されます。しかし、OACがオンの場合、プログラムはDebug / .exe/wincore.cppの行番号でDebugアサーションに失敗します。980.何が問題なのですか?可能であれば解決策を提供してください。

これは、copmleteDestroyWindow関数です。

BOOL CWnd::DestroyWindow()
{
    if (m_hWnd == NULL)
        return FALSE;

    CHandleMap* pMap = afxMapHWND();
    ASSERT(pMap != NULL);
    CWnd* pWnd = (CWnd*)pMap->LookupPermanent(m_hWnd);
#ifdef _DEBUG
    HWND hWndOrig = m_hWnd;
#endif

#ifdef _AFX_NO_OCC_SUPPORT
    BOOL bResult = ::DestroyWindow(m_hWnd);
#else //_AFX_NO_OCC_SUPPORT
    BOOL bResult;
    if (m_pCtrlSite == NULL)
        bResult = ::DestroyWindow(m_hWnd);
    else
        bResult = m_pCtrlSite->DestroyControl();
#endif //_AFX_NO_OCC_SUPPORT

    // Note that 'this' may have been deleted at this point,
    //  (but only if pWnd != NULL)
    if (pWnd != NULL)
    {
        // Should have been detached by OnNcDestroy
#ifdef _DEBUG
//////////////////////////////HERE!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!///////////////////
        ASSERT(pMap->LookupPermanent(hWndOrig) == NULL); //line 980
#endif
    }
    else
    {
#ifdef _DEBUG
        ASSERT(m_hWnd == hWndOrig);
#endif
        // Detach after DestroyWindow called just in case
        Detach();
    }
    return bResult;
}
4

2 に答える 2

0

この問題は、結果のポインターを保存して後で使用するなど、CWnd::FromHwnd を不適切に使用することに関係していると思います。何かを保存する必要がある場合は、CWnd* ではなく HWND にする必要があります。

別の問題として、あるスレッドでウィンドウを作成し、別のスレッドでそれを破棄することがあります。

于 2011-03-12T22:23:58.153 に答える