gpt4 book ai didi

c++ - 异常未通过 RCF 正确传递(使用 Boost.Serialization)

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:01:41 25 4
gpt4 key购买 nike

我将 RCF 与 boost.serialization 一起使用(为什么我们已经使用原始版本时使用 RCF 的拷贝?)它工作正常,但是当服务器中抛出异常时,它没有正确传递给客户端。相反,我得到一个 RCF::SerializationException 引用 archive_exception说“类名太长”。当我将协议(protocol)更改为 BsText 时,异常(exception)是“未注册类”。当我将协议(protocol)更改为 SfBinary 时,它起作用了。我已经像这样在服务器和客户端上注册了 RemoteException:

BOOST_CLASS_VERSION(RCF::RemoteException, 0)
BOOST_CLASS_EXPORT(RCF::RemoteException)

我什至尝试序列化和反序列化 boost::shared_ptr<RCF::RemoteException>在同一个测试中,它有效。

那么如何在不借助 SF 的情况下让 RCF 正确传递异常呢?

最佳答案

这是 Jarl 在 CodeProject 给出的补丁:

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

void serialize(SerializationProtocolOut & out, const RemoteException & e)
{
serialize(out, std::auto_ptr<RemoteException>(new RemoteException(e)));
}

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

ar & boost::serialization::make_nvp("Dummy", apt.get());

,与

T *pt = apt.get();
ar & boost::serialization::make_nvp("Dummy", pt);

关于c++ - 异常未通过 RCF 正确传递(使用 Boost.Serialization),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62810/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com