如果使用debug版本的activex,在ie关闭的时候出现Debug Assertion Failed!引起错误的代码在wincore.cpp中,如下://///////////////////////////////////////////////////////////////////////////
// The WndProc for all CWnd's and derived classesLRESULT CALLBACK
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);《《《《《《《《《《《《《《《《《《引发错误的行
ASSERT(pWnd->m_hWnd == hWnd);
if (pWnd == NULL || pWnd->m_hWnd != hWnd)
return ::DefWindowProc(hWnd, nMsg, wParam, lParam);
return AfxCallWndProc(pWnd, hWnd, nMsg, wParam, lParam);
}

解决方案 »

  1.   

    http://support.microsoft.com/kb/177101
      

  2.   

    我自己并不没有创建线程啊 而且在输出信息中 出错以后没有发现调用AfxDllCanUnloadNow
    出错断点在AfxWndPro里面
      

  3.   

    "Debug Assertion Failed"
    肯定是那个句柄检查有问题.
    你调试一下,再具体分析问题点.
    按情况设置断点,按F5,然后按F10一步步调试.
      

  4.   

    关闭是应该会调用控件的OnDestroy()这个函数,根据你自己的情况将该关掉的资源关掉并释放内存.如果有启动另的线程的话,别忘了在这里一并结束掉.
      

  5.   

    出错在 debug assert faild
    ieplore.exe
    wincore.cpp
    line:384
    cause a assertion
      

  6.   

    CWnd* pWnd = CWnd::FromHandlePermanent(hWnd);
    ASSERT(pWnd != NULL); //查源码,这句断言出错,说明pWnd为NULL了.
    在MSDN上查找函数:CWnd::FromHandlePermanent()
    "Returns a pointer to a CWnd object when given a handle to a window. If a CWnd object is not attached to the handle, NULL is returned."
    再自己进一步检查确认吧.

      

  7.   

    IE6中,切换和关闭是不一样的,关闭的时候IE直接摧毁窗口,并不通知控件析构,这个时候就可能导致空间出错的。
      

  8.   

    显然是过早地释放了一个窗口,可能有一个动态创建地窗口(CWnd地对象),但是该窗口在控件地OnDestroy之前就被系统释放了(比如它地子窗口),而其CWnd对象却要在控件关闭时释放,于是发现和其连接地句柄已经无效了。请检查是否有类似操作。
      

  9.   

    IE6中,切换和关闭是不一样的,关闭的时候IE直接摧毁窗口,并不通知控件析构,这个时候就可能导致空间出错的。
    不会阿。
    我最近一直在搞控件这个切换的问题。
    切换后,控件是会析构。
    如果切换不通知控件析构的话,我切换多个包含不同控件的页面,最后关闭的时候,前面的控件不就无法释放了。
      

  10.   

    debug版本是这么个问题,做成release就没问题了你实际发布的时候肯定不是把debug版本给别人么