首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何利用CORBA (ACE/TAO)实现boost序列化

如何利用CORBA (ACE/TAO)实现boost序列化
EN

Stack Overflow用户
提问于 2014-10-23 17:06:04
回答 1查看 240关注 0票数 1

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

序列化代码:

代码语言:javascript
复制
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();

反序列化代码:

代码语言:javascript
复制
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;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-24 13:49:29

据我所知,在不进行测试的情况下,这是由不同架构上的不同boost版本造成的,请参见Boost serialization: archive "unsupported version" exception

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26533498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档