【发布时间】:2018-11-13 16:38:11
【问题描述】:
我正在使用 Boost 1.41 从内存中读取序列化类,并收到“不支持的版本”异常,即使生成序列化类的程序也使用了 Boost 1.41。
我正在使用以下方法读取数据:
void ConvertMessage (const unsigned char *msgAddress)
{
MessageData messageData;
int msgSize = msgSystem.getDataSize (message); // external system returns message size
char *msgData = new char[msgSize];
memcpy (msgData, msgAddress, msgSize);
try
{
typedef boost::iostreams::basic_array_source<char> Device;
boost::iostreams::stream_buffer<Device> msgStream (msgData, msgSize);
boost::archive::binary_iarchive msg (msgStream); // exception thrown here
msg >> messageData;
}
catch (boost::archive::archive_exception const &e)
{
cout << e.what() << endl;
}
// Code to convert messageData to an internal class.
}
我了解到使用 Boost 1.44 读取 Boost 1.44 之前的档案时存在问题,但我发现双方都使用 Boost 1.41 时存在问题。
当两个程序使用与我们在同一台计算机上相同的库但现在我们在不同的计算机上时,我能够毫无问题地运行此程序。
有什么方法可以验证我们实际上使用的是完全相同的版本吗?
我假设如果序列化的生产者使用的是 Boost 1.41,而我使用的是 Boost 1.41 来反序列化数据,则应该没有问题,但是当我看到“不支持的版本”异常时尝试创建 boost::archive::binary_iarchive。
【问题讨论】:
标签: serialization boost