Bonjour

Je bosse sur un framework pour lequel je cherche a refactorer les logs pour remplacer la lib existante (maison), par quelque chose qui me permette de faire du multithreading (et éviter d'avoir des entremêlements de logs).
Le framework utilisant déjà boost par ailleurs, j'ai donc travaillé autour de Boost.Log.

J'ai donc une classe dans une DLL déclarée comme suit:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
class __declspec(dllexport) BoostLogger: public virtual boost::log::sources::severity_logger_mt < LoggerType >
{
public:
// features
};
Cette classe est donc intégrée au sein d'une DLL utilisée par le framework.
Or lors de la compilation j'ai le message d'erreur suivant:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
cots\boost-1.57.0\include\boost-1_57\boost/log/sources/threading_models.hpp(75) : error C2039: 'try_lock_shared' : is not a member of 'boost::log::v2_mt_nt5::aux::light_rw_mutex'
        cots\boost-1.57.0\include\boost-1_57\boost/log/detail/light_rw_mutex.hpp(180) : see declaration of 'boost::log::v2_mt_nt5::aux::light_rw_mutex'
        cots\boost-1.57.0\include\boost-1_57\boost/log/sources/threading_models.hpp(75) : while compiling class template member function 'bool boost::log::v2_mt_nt5::sources::multi_thread_model<MutexT>::try_lock_shared(void) const'
        with
        [
            MutexT=boost::log::v2_mt_nt5::aux::light_rw_mutex
        ]
        cots\boost-1.57.0\include\boost-1_57\boost/log/sources/basic_logger.hpp(81) : see reference to class template instantiation 'boost::log::v2_mt_nt5::sources::multi_thread_model<MutexT>' being compiled
        with
        [
            MutexT=boost::log::v2_mt_nt5::aux::light_rw_mutex
        ]
        cots\boost-1.57.0\include\boost-1_57\boost/log/sources/severity_feature.hpp(147) : see reference to class template instantiation 'boost::log::v2_mt_nt5::sources::basic_logger<CharT,FinalT,ThreadingModelT>' being compiled
        with
        [
            CharT=char,
            FinalT=boost::log::v2_mt_nt5::sources::severity_logger_mt<MyLogLevel>,
            ThreadingModelT=boost::log::v2_mt_nt5::sources::multi_thread_model<boost::log::v2_mt_nt5::aux::light_rw_mutex>
        ]
        cots\boost-1.57.0\include\boost-1_57\boost/log/sources/basic_logger.hpp(318) : see reference to class template instantiation 'boost::log::v2_mt_nt5::sources::basic_severity_logger<BaseT,LevelT>' being compiled
        with
        [
            BaseT=boost::log::v2_mt_nt5::sources::basic_logger<char,boost::log::v2_mt_nt5::sources::severity_logger_mt<DA::ILogger::Type>,boost::log::v2_mt_nt5::sources::multi_thread_model<boost::log::v2_mt_nt5::aux::light_rw_mutex>>,
            LevelT=MyLogLevel
        ]
        cots\boost-1.57.0\include\boost-1_57\boost/log/sources/severity_logger.hpp(74) : see reference to class template instantiation 'boost::log::v2_mt_nt5::sources::basic_composite_logger<CharT,FinalT,ThreadingModelT,FeaturesT>' being compiled
        with
        [
            CharT=char,
            FinalT=boost::log::v2_mt_nt5::sources::severity_logger_mt<MyLogLevel>,
            ThreadingModelT=boost::log::v2_mt_nt5::sources::multi_thread_model<boost::log::v2_mt_nt5::aux::light_rw_mutex>,
            FeaturesT=boost::log::v2_mt_nt5::sources::features<boost::log::v2_mt_nt5::sources::severity<MyLogLevel>>
        ]
        src\logger\my_boost_logger.h(29) : see reference to class template instantiation 'boost::log::v2_mt_nt5::sources::severity_logger_mt<LevelT>' being compiled
        with
        [
            LevelT=MyLogLevel
        ]
Lorsque j'enlève le __declspec(), la librairie compile normalement, par contre, les autres libs ne lienkent par (normal).

Des idées sur le pkoi d'un comportement différent selon que l'on ait le declspec() ou non ?
Y-a-t-il un define à faire ou autre ?

merci