【问题标题】:Assertion Error when Release the MFC Ext DLL @ dllmodul.cpp #230释放 MFC Ext DLL @ dllmodul.cpp 时的断言错误 #230
【发布时间】:2011-07-13 04:13:56
【问题描述】:

我编写了一个MFC Extension DLL,输入并使用导出的Function就可以了;

但是当我退出应用程序时,在 DLL 释放 DLL 的过程中,它抛出了一个断言错误,然后我跟踪错误,发现它停在这个:

extern "C"
BOOL WINAPI RawDllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID)
{
     hInstance;
     if (dwReason == DLL_PROCESS_ATTACH)
     {
#ifdef _AFXDLL
// make sure we have enough memory to attempt to start (8kb)
          void* pMinHeap = LocalAlloc(NONZEROLPTR, 0x2000);
          if (pMinHeap == NULL)
               return FALSE; // fail if memory alloc fails
          LocalFree(pMinHeap);

          // set module state before initialization
          _AFX_THREAD_STATE* pState = AfxGetThreadState();
          pState->m_pPrevModuleState = AfxSetModuleState(&afxModuleState);
     }
     else if (dwReason == DLL_PROCESS_DETACH && !__mixedModuleStartup)
     {
          // restore module state after cleanup
          _AFX_THREAD_STATE* pState = AfxGetThreadState();

          // ************************************************
          VERIFY(AfxSetModuleState(pState->m_pPrevModuleState) ==
          &afxModuleState); // Where Error occurred 
          // ************************************************

          DEBUG_ONLY(pState->m_pPrevModuleState = NULL);

#endif //_AFXDLL
     }
     return TRUE;
}

【问题讨论】:

    标签: c++ visual-studio-2008 visual-c++ mfc


    【解决方案1】:

    您未能在 DLL 的所有入口点上正确使用 AFX_MANAGE_STATE。所以你的模块状态是错误的,因此断言。

    马丁

    【讨论】:

    • 不过我用的是MFC Ext DLL,我记得AFX_MANAGE_STATE只在MFC Reg DLL中有用。
    • AFX_MANAGE 状态也需要您从 MFC 世界外部越过边界进入它。断言是在告诉您,您的状态以某种方式管理不善。
    猜你喜欢
    • 1970-01-01
    • 2012-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-11
    • 1970-01-01
    • 2017-02-12
    相关资源
    最近更新 更多