[C++] Come eseguire il dllexport di una classe derivata da std :: runtime_error?


Answers

Question

Ho creato una libreria che fornisce una classe di eccezione derivata dall'eccezione standard:

#include <stdexcept>
#include <string>

class BaseException : public std::runtime_error
{
    public:
        BaseException( std::string const & msg );
};

Fin qui tutto bene. Compila e gestisce abbastanza bene su Unix. Ora sto preparando questo per la compilazione in una DLL di Windows:

#ifdef WIN32
#define MY_EXPORT __declspec(dllexport)
#else
#define MY_EXPORT
#endif

#include <stdexcept>
#include <string>

class MY_EXPORT BaseException : public std::runtime_error
{
    public:
        BaseException( std::string const & msg );
};

Tuttavia, questo mi avvisa C4275 : non – DLL-interface class 'std::runtime_error' used as base for DLL-interface class 'BaseException' .

E sfortunatamente, sono un po 'allergico alla documentazione in stile Microsoft: eccessivamente prolisso, e non molto al punto. Continua a lasciarmi completamente confuso su ciò che è effettivamente previsto da me per risolvere il mio problema.

Qualcuno di voi può illuminarmi? Potrei semplicemente abbandonare la classe base, ma poi prendere std::runtime_error o std::exception non catturerebbe la mia classe di eccezioni personalizzata, e preferirei che fosse possibile. Così...?