#ifndef BOOST_THREAD_WIN32_MFC_THREAD_INIT_HPP #define BOOST_THREAD_WIN32_MFC_THREAD_INIT_HPP // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // (C) Copyright 2008 Anthony Williams // (C) Copyright 2011-2012 Vicente J. Botet Escriba // check if we use MFC #ifdef _AFXDLL # if defined(_AFXEXT) // can't use ExtRawDllMain from afxdllx.h as it also defines the symbol _pRawDllMain extern "C" inline BOOL WINAPI ExtRawDllMain(HINSTANCE, DWORD dwReason, LPVOID) { if (dwReason == DLL_PROCESS_ATTACH) { // save critical data pointers before running the constructors AFX_MODULE_STATE* pModuleState = AfxGetModuleState(); pModuleState->m_pClassInit = pModuleState->m_classList; pModuleState->m_pFactoryInit = pModuleState->m_factoryList; pModuleState->m_classList.m_pHead = NULL; pModuleState->m_factoryList.m_pHead = NULL; } return TRUE; // ok } extern "C" __declspec(selectany) BOOL (WINAPI * const _pRawDllMainOrig)(HANDLE, DWORD, LPVOID) = &ExtRawDllMain; # elif defined(_USRDLL) extern "C" BOOL WINAPI RawDllMain(HANDLE, DWORD dwReason, LPVOID); extern "C" __declspec(selectany) BOOL (WINAPI * const _pRawDllMainOrig)(HANDLE, DWORD, LPVOID) = &RawDllMain; # endif #endif #endif