释放MFC Ext DLL时的断言错误@ dllmodule . cpp# 230

Assertion Error when Release the MFC Ext DLL @ dllmodul.cpp #230

本文关键字:错误 dllmodule cpp# 断言 MFC Ext DLL 释放      更新时间:2023-10-16

我编写了一个MFC扩展DLL,当进入它并使用导出函数时一切正常;

但是当我退出应用程序时,在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;
}

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

Martyn