Serialization 如何将boost序列化与CORBA(ACE/TAO)结合使用

Serialization 如何将boost序列化与CORBA(ACE/TAO)结合使用,serialization,boost,corba,ace-tao,Serialization,Boost,Corba,Ace Tao,我试图序列化一个数据结构,通过网络发送它,并在另一端反序列化它。如果两边都一致地编译为x64或x86,则可以非常好地工作,但在两者之间无法工作,即使我只序列化一个布尔值 序列化代码: Myclass myc; std::stringstream ss; boost::archive::text_oarchive oa(ss); oa << myc; // get stringstream's length ss.seekg(0, ios::end); int len = ss.te

我试图序列化一个数据结构,通过网络发送它,并在另一端反序列化它。如果两边都一致地编译为x64或x86,则可以非常好地工作,但在两者之间无法工作,即使我只序列化一个布尔值

序列化代码:

Myclass myc;
std::stringstream ss;
boost::archive::text_oarchive oa(ss);
oa << myc;

// get stringstream's length
ss.seekg(0, ios::end);
int len = ss.tellg();
ss.seekg(0, ios::beg);

// allocate CORBA type and copy the stringstream buffer over
const std::string copy = ss.str();  // copy since str() only generates a temporary  object
const char* buffer = copy.c_str();

// ByteSequence is a sequence of octets which again is defined as a raw, platform-independent byte type by the CORBA standard
IDL::ByteSequence_var byteSeq(new IDL::ByteSequence());
byteSeq->length(len);
memcpy(byteSeq->get_buffer(), buffer, len);

return byteSeq._retn();
IDL::ByteSequence_var byteSeq;
byteSeq = _remoteObject->getMyClass();

// copy CORBA input sequence to local char buffer
int seqLen = byteSeq->length();
std::unique_ptr<char[]> buffer(new char[seqLen]);
memcpy(buffer.get(), byteSeq->get_buffer(), seqLen);

// put buffer into a stringstream
std::stringstream ss;
std::stringbuf* ssbuf = ss.rdbuf();
ssbuf->sputn(buffer.get(), seqLen);

// deserialize from stringstream
// throws exception 'Unsupported version' between x86 and x64
boost::archive::text_iarchive ia(ss);

MyClass result;
ia >> result;
Myclass-myc;
std::stringstream-ss;
boost::archive::text\u oarchive oa(ss);

oa据我所知,这是由不同体系结构上的不同boost版本引起的,请参见

是的,这是我自己同时发现的问题。起初我并没有真正考虑这一点,因为我没想到Boost在一个版本号的增加之后不能读取自己的档案(在一个版本中有1.55个,而另一个版本有1.56个)。