they are all running in the same 64 bits architecture. I've also tried the text archive but got the same error

2012/5/25 Robert Ramey <ramey@rrsd.com>
Ibrahim Beicker wrote:
> I had to port a multi-process application to 64 bits and I rely on
> boost serialization to send messages, that are maps of key-values,
> into Microsoft queues to the other modules. It works just fine into
> 32 bits but when I run it in 64 the constructor throws an "invalid
> signature" exception
>
> void Message::fromBinary( const std::string& data )
> {
>   std::stringstream ss;
>   ss << data;
>   boost::archive::binary_iarchive ia(ss); //exception here
>
>   ia >> *this;
> }
>
> I managed to debug into basic_binary_iarchive.ipp and this 'if' @
> line 72 fails
>
> if(file_signature != BOOST_ARCHIVE_SIGNATURE())
>
> boost::serialization::throw_exception(archive_exception(archive_exception::invalid_signature));
>
> inside this file I have no debug symbols so I don't know the values
> of 'file_signature' and 'BOOST_ARCHIVE_SIGNATURE' or where
> BOOST_ARCHIVE_SIGNATURE is defined.
>
> Some additional information: the modules are all running on the same
> machine, on windows 7 64-bits, and  compiled by visual studio 2010
> x64 including static boost libraries 1.45.
>
> What causes this and how can I fix it?
>

binary archives are not portable across architectures.  Specifically
it is not possble to create a binary archive with 32 bit code and
and read that archive with 64 bit code.  You'll have to write
your achive to some portable format such as a text archive.
Then you can load it on any platform.

Robert Ramey



_______________________________________________
Boost-users mailing list
Boost-users@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/boost-users