【发布时间】:2010-03-11 09:56:41
【问题描述】:
我在我的 .NET 应用程序中使用 ProtoBuf-Net 来序列化以下内容:(以 .proto 格式)
message ProtoScreenBuffer {
optional int32 MediaId = 1;
optional bytes Data = 2;
optional bool LastBuffer = 3;
optional int64 StartTime = 4;
optional int64 StopTime = 5;
optional int32 Flags = 6;
optional int32 BufferSubType = 7;
optional int32 BufferType = 8;
optional Guid Guid = 9;
repeated int32 EncryptedDataStart = 10;
repeated int32 EncryptedDataLength = 11;
}
我的目标是将其序列化并将其作为单个样本注入 ASF 文件。
我称之为序列化:
MemoryStream ms = new MemoryStream();
Serializer.Serialize<ProtoScreenBuffer>(ms, ProtoScreenBuffer.CreateProtoScreenBuffer (buffer));
然后我从 ms 对象中得到一个字节数组:
ms.ToArray();
然后我将这个字节数组放入 ASF。最大的问题是我的 C++ 应用程序可以很好地读取 ASF 示例,当我尝试反序列化它时遇到内存访问冲突:(
这是我的 C++ 代码:
m_screenBuffer.ParseFromArray(serBuffer, dwInputDataLen);
(其中 m_screenBuffer 是 ProtoScreenBuffer,serBuffer 是我从 ASF 文件中得到的原始字节数组,dwInputDataLen 是它的长度。)
对于我正在尝试做的事情,我在这里做的任何事情都是错误的吗(在 C# .NET 中序列化并在 C++ 中反序列化?)
非常感谢。
罗伊
【问题讨论】:
-
出于兴趣,您是否尝试过在 Java 中反序列化,或者使用我的 C# 端口来反序列化?这将给出一些迹象,表明是 C++ 还是 protobuf-net 导致了问题。
-
移植我的代码以使用您的 C# 端口需要付出多少努力?
-
嗨 Jon,我无法使用 protogen.exe 创建代码。我得到一个异常:错误:协议消息结束组标记与预期标记不匹配。这是为什么?
-
只是为了确认;最后一行与@Jon 的原型有关,不是我的?
标签: c# c++ protocol-buffers protobuf-net