MFC DllMain

来源:互联网 发布:免费玻璃排版软件 编辑:程序博客网 时间:2024/06/03 17:54
/////////////////////////////////////////////////////////////////////////////// export DllMain for the DLLextern "C"BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID /*lpReserved*/){if (dwReason == DLL_PROCESS_ATTACH){BOOL bResult = FALSE;#ifdef _AFXDLL// wire up resources from core DLLAfxCoreInitModule();#endif_AFX_THREAD_STATE* pState = AfxGetThreadState();AFX_MODULE_STATE* pPrevModState = pState->m_pPrevModuleState;// Initialize DLL's instance(/module) not the app'sif (!AfxWinInit(hInstance, NULL, _T(""), 0)){AfxWinTerm();goto Cleanup;       // Init Failed}// initialize the single instance DLLCWinApp* pApp; pApp = AfxGetApp();if (pApp != NULL && !pApp->InitInstance()){pApp->ExitInstance();AfxWinTerm();goto Cleanup;       // Init Failed}pState->m_pPrevModuleState = pPrevModState;#ifdef _AFXDLL// wire up this DLL into the resource chainVERIFY(AfxInitExtensionModule(controlDLL, hInstance));CDynLinkLibrary* pDLL; pDLL = new CDynLinkLibrary(controlDLL);ASSERT(pDLL != NULL);#elseAfxInitLocalData(hInstance);#endifbResult = TRUE;Cleanup:pState->m_pPrevModuleState = pPrevModState;#ifdef _AFXDLL// restore previously-saved module stateVERIFY(AfxSetModuleState(AfxGetThreadState()->m_pPrevModuleState) ==&afxModuleState);DEBUG_ONLY(AfxGetThreadState()->m_pPrevModuleState = NULL);#endifreturn bResult;}else if (dwReason == DLL_PROCESS_DETACH){#ifdef _AFXDLL// set module state for cleanupASSERT(AfxGetThreadState()->m_pPrevModuleState == NULL);AfxGetThreadState()->m_pPrevModuleState =AfxSetModuleState(&afxModuleState);#endifCWinApp* pApp = AfxGetApp();if (pApp != NULL)pApp->ExitInstance();#ifdef _DEBUG// check for missing AfxLockTempMap callsif (AfxGetModuleThreadState()->m_nTempMapLock != 0){TRACE1("Warning: Temp map lock count non-zero (%ld).\n",AfxGetModuleThreadState()->m_nTempMapLock);}#endifAfxLockTempMaps();AfxUnlockTempMaps(-1);// terminate the library before destructors are calledAfxWinTerm();#ifdef _AFXDLLAfxTermExtensionModule(controlDLL, TRUE);#elseAfxTermLocalData(hInstance, TRUE);#endif}else if (dwReason == DLL_THREAD_DETACH){AFX_MANAGE_STATE(&afxModuleState);#ifdef _DEBUG// check for missing AfxLockTempMap callsif (AfxGetModuleThreadState()->m_nTempMapLock != 0){TRACE1("Warning: Temp map lock count non-zero (%ld).\n",AfxGetModuleThreadState()->m_nTempMapLock);}#endifAfxLockTempMaps();AfxUnlockTempMaps(-1);AfxTermThread(hInstance);}return TRUE;}#ifdef _AFXDLL/////////////////////////////////////////////////////////////////////////////

原创粉丝点击