|
Boost : |
Subject: [boost] serialization in multiple dlls
From: pipalapop (pipalapop_at_[hidden])
Date: 2010-12-08 11:51:28
Hi,
I have a problem with the deserialization of objects defined in multiple dlls.
I define the following classes in a first dll: polymorphic_base (pure virtual) and polymorphic_derived1 (derived from polymorphic_base).
In a second dll, I define the class polymorphic_derived2 (derived from polymorphic_derived1).
In an executable, I serialize an object of type polymorphic_derived2 followed and two objects of type polymorphic_derived1 in the order defined in this function:
void save_exported (const char *testfile)
{
std::ofstream os(testfile);
xml_oarchive oa(os);
polymorphic_base * pb_ptr_1 = new polymorphic_derived1;
oa << BOOST_SERIALIZATION_NVP(pb_ptr_1);
polymorphic_base * pb_ptr_2 = new polymorphic_derived2;
oa << BOOST_SERIALIZATION_NVP(pb_ptr_2);
polymorphic_base * pb_ptr_3 = new polymorphic_derived1;
oa << BOOST_SERIALIZATION_NVP(pb_ptr_3);
}
The serialization works, but when, I try to deserialyze with this function:
void load_exported(const char *testfile)
{
std::ifstream is(testfile);
xml_iarchive ia(is);
polymorphic_base * pb_ptr_1 = NULL;
ia >> BOOST_SERIALIZATION_NVP(pb_ptr_1);
polymorphic_base * pb_ptr_2 = NULL;
ia >> BOOST_SERIALIZATION_NVP(pb_ptr_2);
polymorphic_base * pb_ptr_3 = NULL;
ia >> BOOST_SERIALIZATION_NVP(pb_ptr_3); // <= exception
}
an exception is thrown on the deserialization of the second object of type polymorphic_derived1 but it works for the first one.
in the file basic_archive.cpp, line 466 : "pending_bis = & bpis_ptr->get_basic_serializer();"
bpis_ptr is null.
It seems that the deserialization of the object of type polymorphic_derived2 (derived from polymorphic_derived1) has broken the part of table cobject_id_vector concerning polymorphic_derived1.
If polymorphic_derived2 is defined in the first dll, there is no problem.
Is it possible to make it works with 2 dll?
Regards, Yohan
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk