
Hi, Below is a basic sample adapted from the documentation at: http://tinyurl.com/55fr4q For me, with Visual Studio 2008, the deserialization of the base pointer results in an instance of the base class, not the serialized derived class. Also, if I add a virtual function to the base class, deserialization results in an exception (it attempts to instantiate the base class anyway). I added the change cited here and rebuilt the serialization library, which did not help: http://tinyurl.com/5j4e8x Any suggestions would be appreciated. Thanks, Steve Sanders #include "stdafx.h" #include "stdafx.h" #include <sstream> // include headers that implement a archive in simple text format #include <boost/archive/text_oarchive.hpp> #include <boost/archive/text_iarchive.hpp> #include <boost/serialization/export.hpp> class base { public: base(){ m_val = 1; } void PrintVal( void ) { printf(" Value: %d\n", m_val ); } protected: // virtual void foo(void) = 0; friend class boost::serialization::access; //... // only required when using method 1 below // no real serialization required - specify a vestigial one template<class Archive> void serialize(Archive & ar, const unsigned int file_version){} int m_val; }; class derived : public base { public: derived(){ m_val = 2; } private: void foo(void){} friend class boost::serialization::access; template<class Archive> void serialize(Archive & ar, const unsigned int file_version){ // method 1 : invoke base class serialization boost::serialization::base_object<base>(*this); // method 2 : explicitly register base/derived relationship boost::serialization::void_cast_register<derived, base>( static_cast<derived *>(NULL), static_cast<base *>(NULL) ); } }; BOOST_CLASS_EXPORT_GUID(derived, "derived") void test4(){ //... std::stringstream ss; boost::archive::text_oarchive oa(ss); derived *d = new derived(); base *b = d; b->PrintVal(); oa & d; boost::archive::text_iarchive ar(ss); b = NULL; ar & b; b->PrintVal(); } int main() { test4(); return 0; }