2016-11-29 7 views
0

から呼び出されたときに、私は今libfooという名前で、Win32コンソールアプリケーションexefooによって使用される、私のDLLにboost::logの出力をフォーマットするために使用され動作しません。コードは今libfooの主、被露光体でブースト::ログ形式は、DLL

// #include various boost log headers 

void __declspec(dllexport) add_boost_log_console_sink() 
{ 
    boost::log::add_common_attributes(); 

    boost::shared_ptr<text_sink> sink = boost::make_shared<text_sink>(); 

    sink->locked_backend()->add_stream(boost::shared_ptr<std::ostream>(&std::cout, boost::null_deleter())); 

    sink->set_formatter(xspectra::get_our_formatter(false)); 

    sink->set_filter(boost::log::trivial::severity >= boost::log::trivial::info 
     && 
     boost::log::expressions::has_attr(tag_attr) == false); 

    boost::log::core::get()->add_sink(sink); 
} 

boost::log::formatter __declspec(dllexport) get_our_formatter(bool bSubSeconds) 
{ 
    std::string sTimeStamp("%H:%M:%S"); 
    if (bSubSeconds) 
     sTimeStamp += ".%f"; 

    return boost::log::expressions::stream 
     //<< std::hex //To print the LineID in Hexadecimal format 
     << std::setw(6) << std::setfill('0') 
     << line_id 
     << "\t" 
     << boost::log::expressions::format_date_time<boost::posix_time::ptime>("TimeStamp", sTimeStamp) 
     << " <" << boost::log::trivial::severity 
     << "> \t" 
     /* 
        << boost::log::expressions::if_(boost::log::expressions::has_attr(tag_attr)) 
        [ 
         boost::log::expressions::stream << "[" << tag_attr << "]\t"   TAGS SUSPENDED 
        ] 
     */ 
     << boost::log::expressions::smessage; 
} 

ですが、私はmain()のexefoo内部-once- add_boost_log_console_sink();同じコールを呼んでいました。

がフォーマットされた出力を生成してを調べてlibfoo内部のすべてのその後のBOOST_LOG_TRIVIAL(severity)コールexefoo内部のすべての同様の呼び出しはありませんでした。コードのモジュールの目的のために

、私はを調べてlibfooexefooによって使用される新しいDLL、 liblog 、にこれらの関数を移動しました。現在、すべてのログはではなく、となっています。

このコードをDLLからロードしても、どうにかしても効果はありません。私はそれがしたいと思います。

+0

Boost.Logと動的に(つまりDLLを)リンクしていますか?あなたは 'BOOST_LOG_DYN_LINK'または' BOOST_ALL_DYN_LINK'を定義しますか? –

+0

私は 'libboost_log-vc140-mt-1_60.lib'と静的にリンクしています。しかし、* liblog *と* libfoo *はdllです。たぶん少なくとも* liblog *を静的ライブラリに変更する必要があります。 –

+0

それが問題の原因です。 Boost.Logは、異なるモジュールから使用される場合、共有ライブラリとして構築する必要があります。 http://www.boost.org/doc/libs/1_62_0/libs/log/doc/html/log/installation/config.html –

答えて

0

Andrey Semashevの洞察により、私はliblogダイナミックからスタティックライブラリへの設定タイプを切り替えました。今はすべて正常に動作します。

関連する問題