Ошибка подтверждения при выпуске MFC Ext DLL @ dllmodul.cpp # 230 - PullRequest
0 голосов
/ 13 июля 2011

Я запрограммировал MFC Extension 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;
}

Ответы [ 2 ]

0 голосов
/ 13 июля 2011

Диалог подтверждения ошибки никогда не появится при сборке релиза.Убедитесь, что DLL и EXE являются сборками релиза.

0 голосов
/ 13 июля 2011

Вы не смогли правильно использовать AFX_MANAGE_STATE на всех точках входа в вашу DLL.Таким образом, состояние вашего модуля неправильное, отсюда и утверждение.

Martyn

...