
Re: unregistered_class exceptions are thrown when the derived class are in an explicitly loaded DLL. Hello, In a nutshell, the problem that I have is that an "unregistered_class" exception is thrown when the derived class is defined/declared in a DLL that is explicitly loaded. The problem as far as I can tell is that the derived class in dll and the derived class in the framework are being "registered" in two different instances (m_self->m_map.insert(eti); in "extended_type_info.cpp"). Exception is thrown when trying to serialize the foobar_derived_dll. It looks for "foobar_derived_dll" in the wrong instance of the m_map defined in the extened_type_info.cpp and then throws an exception. Can anybody please help The Application Structure is more or less as follows. Common Framework Library Contains. class foobar_base : public foobar_base { protected: bool m_attr0; public: foobar_base() {} template<class Archive> void serialize(Archive & ar, const unsigned int /* file_version */){ std::cout << "serialize foobar_base\n"; ar & BOOST_SERIALIZATION_NVP(m_attr0); } } class foobar_derived : public foobar_base { protected: bool m_attr1; public: foobar_derived() {} template<class Archive> void serialize(Archive & ar, const unsigned int /* file_version */){ std::cout << "serialize foobar_derived_dll\n"; ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(foobar_base); ar & BOOST_SERIALIZATION_NVP(m_attr1); } } BOOST_CLASS_EXPORT_GUID(foobar_derived, "foobar_derived") Dynamic Link Library Contains (Includes Common Framework Library) class foobar_derived_dll { protected: bool m_attr2; public: foobar_derived_dll() {} template<class Archive> void serialize(Archive & ar, const unsigned int /* file_version */){ std::cout << "serialize foobar_derived_dll\n"; ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(foobar_base); ar & BOOST_SERIALIZATION_NVP(m_attr2); } } BOOST_CLASS_EXPORT_GUID(foobar_derived_dll, "foobar_derived_dll") Main Application (includes Common framework library & explictly lods Dynamic Link Library) class foo { public: std::list<boost::shared_ptr<foobar_base> > m_foovec; public: foo ( ) { }; ~foo ( ) { }; template<class Archive> void serialize(Archive &ar, const unsigned int version) { ar & BOOST_SERIALIZATION_NVP(m_foovec); } }; (..Include Framwork..) int main() { // load the DLL.. LoadLibrary(... DLL)" foo f; f.m_foovec.push_back( boost::shared_ptr<foobar_base>(new foobar_derived(.... f.m_foovec.push_back( boost::shared_ptr<foobar_base>(new foobar_derived_dll(.... std::string filename("c:\\tmp.txt"); try { // write to file std::ofstream ofs(filename.c_str()); assert(ofs.good()); boost::archive::text_oarchive oa(ofs); oa << BOOST_SERIALIZATION_NVP(f); ofs.close(); } catch (std::exception &e) { std::cout << e.what() << std::endl; } }