mfcアプリにboost::Logを組み込もうとしています。ログの保存などロギングに関する動作は問題ないのですが、アプリ終了時に一般保護例外が出てしまいます。(boostのバージョンは1.60.0)
例外が発生する箇所は、boostのsrw_lock.hppの
c++
1BOOST_FORCEINLINE VOID_ AcquireSRWLockExclusive(PSRWLOCK_ SRWLock) 2{ 3 ::AcquireSRWLockExclusive(reinterpret_cast< ::_RTL_SRWLOCK* >(SRWLock)); 4}
で、::AcquireSRWLockExclusiveでSRWLockが0xddddddddと不正なアドレスを示しているために一般保護例外になっているようなのです。Visual Studioの呼出履歴を見ると
c++
1LPCExplorer.exe!boost::detail::winapi::AcquireSRWLockExclusive(boost::detail::winapi::_RTL_SRWLOCK * SRWLock) 行 82 C++ 2LPCExplorer.exe!boost::log::v2s_mt_nt6::aux::light_rw_mutex::lock() 行 67 C++ 3LPCExplorer.exe!boost::log::v2s_mt_nt6::aux::exclusive_lock_guard<boost::log::v2s_mt_nt6::aux::light_rw_mutex>::exclusive_lock_guard<boost::log::v2s_mt_nt6::aux::light_rw_mutex>(boost::log::v2s_mt_nt6::aux::light_rw_mutex & m) 行 102 C++ 4LPCExplorer.exe!boost::log::v2s_mt_nt6::core::remove_all_sinks() 行 511 C++ 5
となっていて、終了時のboost.Logの後片付けで発生しているんだろうなぁまでは分かるんですが、それ以上はboost.Logの内部の仕組みをよく理解してないので追いきれてません。
どなたか、わかる方がいれば助かります。
ちなみに、ロガーはクラス化してあって、MFC以外のアプリ(Win32)では問題なく動作しています。
MFC + Boost.Logは無理なんでしょうかね?(MFCを辞めたいのは山々なんですが、このアプリをWin32で作りなおすのは時間とコストを考えると事実上不可能に近い・・・)

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/02/02 04:32