在多文档框架中调用封装好的FORMVIEW DLL,然后由FROMVIEW DLL调用一个封装好的对话框DLL,执行时正常,但关闭对话框时出现断言错误,这是什么原因?
我把FORMVIEW和对话框封装在一个DLL,在多文档框架中调用一切正常!

解决方案 »

  1.   

    应该是你的对话框在关闭的时候自己释放,但在formview中可能调用了dialog主动释放
      

  2.   

    是用户点击"关闭",关闭对话框/
    错误如下:
    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
    ASSERT(pMap->LookupPermanent(hWndOrig) == NULL);
    #endif
    }
    else
    {
    #ifdef _DEBUG
    ASSERT(m_hWnd == hWndOrig);// 光标停留处//出错位置
    #endif
    // Detach after DestroyWindow called just in case
    Detach();
    }
    return bResult;
    }
      

  3.   

    在ASSERT(m_hWnd == hWndOrig);处出错
    界面错误对话框信息如下:
    Debug Assertion Failed!file: wincore.cpp
    Line:986
      

  4.   

    针对“我把FORMVIEW和对话框封装在一个DLL,在多文档框架中调用一切正常!”我认为是资源的问题!在DLL中调用另一DLL,如你的FORMVIEW 调用 对话框DLL,“对话框”DLL的DllMain()不会成功加载资源!!必须__declspec(dllexport)导出函数加载资源,“显示调用”后才能正确加载“对话框”DLL的资源到“资源链”中!!!说错了请指教:)
      

  5.   

    怎么在__declspec(dllexport)导出函数中加载资源,可以说详细点吗?"显示调用"是什么意思?另外,对话框DLL已经调用成功并显示出来,只是在关闭对话框时,出现断言错误.
      

  6.   

    导出函数如下:
    extern "C" __declspec(dllexport) int ShowDlg(CWnd * pWnd,char* sell_ID, DLLParam *pDllParam)
    {
    CSellDlg sellDlg; //CSellDlg为弹出的对话框类

    AFX_MANAGE_STATE(AfxGetStaticModuleState()); g_strConnect = pDllParam->strConnect;
    g_Database = pDllParam->pDatabase;
    g_strWorkerNum = pDllParam->strWorkerNum;
    g_nPageSize = pDllParam->nPageSize; sellDlg.m_Sell_ID = sell_ID;
    sellDlg.isNew = FALSE;
    sellDlg.DoModal();

    return 1;
    }