2011-07-13 18 views
0

MFC拡張DLLをプログラムしましたが、それを入力してエクスポートされた関数を使用しても問題ありませんでした。アサーションエラー@ dllmodul.cpp#230

しかし、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; 
} 

答えて

0

あなたは正しくAFX_MANAGE_STATEを使用することができませんでしたDLLへのすべてのエントリポイントで。だから、あなたのモジュールの状態は間違っているので、assertです。

Martyn

+0

私はMFC Ext DLLを使用しましたが、AFX_MANAGE_STATEはMFC Reg DLLでのみ有効であることを覚えています。 – Metalbrick

+0

AFX_MANAGE状態は、MFCユニバースの外側から境界内に境界を越えるたびにも必要です。主張は、あなたの国家が何らかの形で管理されていないことを伝えています。 –

0

アサーション失敗ダイアログはリリースビルドには表示されません。 DLLとEXEの両方がリリースビルドであることを確認してください。

+0

デバッグ中にエラーが発生している間は、リリースビルドで正常に動作します。 – Metalbrick

+0

"しかし、DLLをリリースしている間にアプリケーションを終了すると、DLL、それは..." - あなたはリリースDLL中にのみ言及しました。 – Ajay

関連する問題