DLL_SERIALIZATION_CORE.h class A { template void serialize(Archive& ar, int version); }; class B { template void serialize(Archive& ar, int version); A a; A* pA; }; class XmlOutArchive : public VxPersistence::VxArchive, public boost::archive::xml_oarchive_impl { public: XmlOutArchive(std::ostream & os, unsigned int saveFlags, unsigned int boostFlags = 0); ~XmlOutArchive(); }; class XmlInArchive : public VxPersistence::VxArchive, public boost::archive::xml_iarchive_impl, public boost::archive::detail::shared_ptr_helper { public: XmlInArchive(std::istream & is, unsigned int loadFlags, unsigned int boostFlags = 0); ~XmlInArchive(); }; DLL_SERIALIZATION_CORE.cpp template void A::serialize(Archive& ar, int version) { } template void B::serialize(Archive& ar, int version) { ar & a; ar & pA; } BOOST_SERIALIZATION_REGISTER_ARCHIVE(XmlOutArchive) BOOST_SERIALIZATION_REGISTER_ARCHIVE(XmlInArchive) template EXPORT_DECLSPEC void A::serialize(XmlOutArchive& ar, const unsigned int version); template EXPORT_DECLSPEC void B::serialize(XmlOutArchive& ar, const unsigned int version); template EXPORT_DECLSPEC void A::serialize(XmlInArchive& ar, const unsigned int version); template EXPORT_DECLSPEC void B::serialize(XmlInArchive& ar, const unsigned int version); DLL_SERIALIZATION_EXTENSION.h class C { template void serialize(Archive& ar, int version); A a; }; DLL_SERIALIZATION_EXTENSION.cpp template void C::serialize(Archive& ar, int version) { ar & a; } template EXPORT_DECLSPEC void C::serialize(XmlOutArchive& ar, const unsigned int version); template EXPORT_DECLSPEC void C::serialize(XmlInArchive& ar, const unsigned int version); APPLICATION_MAIN.cpp C c; XmlInArchive archive; archive >> c;