
Hi, I have the same scenario, and it's not a problem. If i understand (my english is poor, sorry) well. But there is differences: - I use GCC compilers (but boost is portable). - I use static linking. Probably this differences should not have consequences on the result. I didn't read your code... Had you follow this rules ? - Register child class (a simple way is using the BOOST_CLASS_EXPORT macro). - In the serialize method of your child class, call the serialization of parent's class (optional). I use BOOST_SERIALIZATION_BASE_OBJECT's macro.
If you register child class it should be ok... Regards, Damien.
Hi Damien, My reply has not been posted in gmane so I try again: Thank you for your quick reply. I believe I followed the rules: 1. polymorphic_derived1 and polymorphic_derived2 do include the serialization of the base class via "ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(polymorphic_base); " 2. there is no usage of BOOST_CLASS_EXPORT ( and there shouldn't be any: according to the documentation, in a dll setup one must declare BOOST_CLASS_EXPORT_KEY in the headers containing the classes to be serialized and BOOST_CLASS_EXPORT_IMPLEMENT in the .cpp files). In my example, there are exactly three declarations of BOOST_CLASS_EXPORT_KEY: one in polymorphic_base.hpp, and two in polymorphic_derived2.hpp one for polymorphic_derived1 and another for polymorphic_derived2. Similarly, there are only three usages of BOOST_CLASS_EXPORT_IMPLEMENT. 3. for deeper hierarchies where every class can be potentially serialized, one should probably register all the classes and not just the most derived children. I have the feeling that the type of deployment (dll vs exe) is the crux of the problem. For that, I created four different scenarios with the same source files and I got the following results: 1. all files in one exe with the serialization library linked statically - WORKS AS EXPECTED. 2. all files in one exe with the serialization library linked as a dll - WORKS AS EXPECTED. 3. serialization files in a separate dll. Both the main executable and my dll link with the dll version of the serialization library: main.exe my_serialization.dll boost_serialization.dll my_serialization.dll boost_serialization.dll Builds OK but FAILS at runtime , at run time I get a C++ exception BEFORE main() in basic_serializer_map.cpp around the line 48: 'archive_exception::multiple_code_instantiation with the message "code instantiated in more than one module - polymorphic_base"' 4. serialization files in a separate dll. Both the main executable and my dll link with the static version of the serialization library: main.exe my_serialization.dll boost_serialization.lib my_serialization.dll boost_serialization.lib Builds OK but FAILS at runtime while trying to serialize with the following exception thrown in oserializer.hpp(line 424):struct polymorphic::save(): 'unregistered void cast class polymorphic_derived1<-polymorphic_base in function 'int __cdecl main(int,char *[])'' The source code in the scenarios above is identical with the exception of dllexport/dllimport declaration needed for dlls. Whenever the serialization code is relegated to a different library it seems there are problems with boost serialization: - if boost is linked as a static lib into a user dll, the class serializers do not get registered at all with their associated map singleton. - if boost is linked as a dynamic lib into a user dll, the class serializers register twice with the map singleton of the polymorphic base archive. I don't want to add them here but I can provide any of the projects above to those interested. Thank you all, Bogdan