首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未通过RCF正确传递的异常(使用Boost.Serialization)

未通过RCF正确传递的异常(使用Boost.Serialization)
EN

Stack Overflow用户
提问于 2008-09-15 13:22:55
回答 2查看 695关注 0票数 2

我将RCF与boost.serialization一起使用(既然我们已经在使用原始版本,为什么还要使用RCF的副本呢?)它工作正常,但是当在服务器中抛出异常时,它不会被正确地传递到客户端。相反,我得到了一个RCF::SerializationException,它引用了一个archive_exception,说“类名太长”。当我将协议更改为BsText时,异常是“未注册的类”。当我将协议更改为SfBinary时,它可以工作。我在服务器和客户端都注册了RemoteException,如下所示:

代码语言:javascript
复制
BOOST_CLASS_VERSION(RCF::RemoteException, 0)
BOOST_CLASS_EXPORT(RCF::RemoteException)

我甚至在同一个测试中尝试了对boost::shared_ptr<RCF::RemoteException>进行序列化和反序列化,并且成功了。

那么,如何才能让RCF在不求助于SF的情况下正确地传递异常呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2008-09-25 10:41:52

这是由CodeProject的Jarl提供的补丁

在RcfServer.cpp中,在定义RcfServer::handleSession()的行前(792行左右)插入以下代码:

代码语言:javascript
复制
void serialize(SerializationProtocolOut & out, const RemoteException & e)
{
      serialize(out, std::auto_ptr<RemoteException>(new RemoteException(e)));
}

在Marshal.cpp中,在第37行附近,替换此行:

代码语言:javascript
复制
ar & boost::serialization::make_nvp("Dummy", apt.get());

,具有

代码语言:javascript
复制
T *pt = apt.get();
ar & boost::serialization::make_nvp("Dummy", pt);
票数 2
EN

Stack Overflow用户

发布于 2008-09-17 17:29:55

根据Jarl it works的说法,请检查codeproject中的问题和答案,并使用示例代码:

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

https://stackoverflow.com/questions/62810

复制
相关文章

相似问题

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