they are all running in the same 64 bits
architecture. I've also tried the text archive but got the same error
binary archives are not portable across architectures. SpecificallyIbrahim 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?
>
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