Poner la serialización de una clase en una DLL

Estoy buscando un ejemplo (de trabajo) para serializar externamente una estructura de clase en una DLL. Actualmente no puedo encontrar ningún ejemplo para eso. La documentación de Boost solo indica algunas macros, los foros y grupos de noticias solo están discutiendo problemas específicos con sus soluciones.

Así que estoy pidiendo un ejemplo para serializar (externamente) una estructura de clase como la siguiente. Junto con el código de clase, agregué un código mío para la serialización (que no funciona, vea el mensaje de error al final).

class Foo
{
public:
    Foo() { number_ = 0; }
    virtual ~Foo() {}

    int getNumber() { return number_; }
    void setNumber( int var ) { number_ = var; }
private:
    int number_;
};

class Bar : public Foo
{
public:
    Bar() { doubleNumber_ = 0.0; }
    virtual ~Bar() {}

    double getDouble() { return doubleNumber_; }
    void setDouble( double var ) { doubleNumber_ = var; }

private:
    double doubleNumber_;
};

Todo lo que tengo hasta ahora es un código como este:

serializeFoo.h

#ifndef _SERIALIZE_FOO_H_
#define _SERIALIZE_FOO_H_

#include "Foo.h"
#include <boost/serialization/split_free.hpp>
#include <boost/serialization/version.hpp>

namespace boost {
namespace serialization {

template <typename Archive>
void save(Archive& ar, const Foo& object, const unsigned int version)
{
    ar << object.getNumber();
}

template <typename Archive>
void load(Archive& ar, Foo& object, const unsigned int version)
{
    int number;
    ar >> number;
    object.setNumber(number);
}

}} //namespace brackets

BOOST_SERIALIZATION_SPLIT_FREE( Foo )

#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <boost/serialization/export.hpp>
BOOST_CLASS_EXPORT_KEY( Foo )

#endif //_SERIALIZE_FOO_H_

serializeFoo.cpp

#include "serializeFoo.h"
BOOST_CLASS_EXPORT_IMPLEMENT( Foo )

serializeBar.h:

#ifndef _SERIALIZE_BAR_H_
#define _SERIALIZE_BAR_H_

#include "Bar.h"
#include <boost/serialization/split_free.hpp>
#include <boost/serialization/version.hpp>

namespace boost {
namespace serialization {

template <typename Archive>
void save(Archive& ar, const Bar& object, const unsigned int version)
{
    ar << base_object<Foo>(object);
    ar << object.getDouble();
}

template <typename Archive>
void load(Archive& ar, Bar& object, const unsigned int version)
{
    double doubleNumber;
    ar >> doubleNumber;
    object.setDouble(doubleNumber);
}

}} //namespace brackets

BOOST_SERIALIZATION_SPLIT_FREE( Bar )

#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <boost/serialization/export.hpp>
BOOST_CLASS_EXPORT_KEY( Bar )

#endif //_SERIALIZE_BAR_H_

serializeBar.cpp:

#include "serializeBar.h"
BOOST_CLASS_EXPORT_IMPLEMENT( Bar )

El código de serialización entra en un archivo DLL y debe usarse en otro proyecto usando las clases Foo y Bar. Todo se compila bien, pero en tiempo de ejecución recibo el mensaje
unregistered class - derived class not registered or exported

¿Entonces usé las macros incorrectas? ¿Echo de menos una macro? ¿Es correcto el código anterior o hay algún tipo de error estructural? Quizás esto podría ser útil para muchas otras personas también, no creo que poner la serialización de una clase en una DLL sea muy exótico ...

Respuestas a la pregunta(8)

Su respuesta a la pregunta