繁体   English   中英

协议缓冲区,让C#与C ++通信:输入问题和架构问题

[英]Protocol buffers, getting C# to talk to C++ : type issues and schema issues

我即将开始一个项目来连接两个程序,一个在c#中,一个在c ++中。 我已经有一个有效的c#程序,可以与其他版本的自己交谈。 在开始使用c ++版本之前,我已经想到了一些问题:

1)我正在使用protobuf-net v1。 我认为来自序列化程序的.proto文件正是c ++版本的模板所需要的? 谷歌搜索提到了关于pascal外壳的一些内容,但我不知道这是否重要。

2) 如果其中一种.NET类型在c ++中没有直接对应物,我该怎么办? 如果我有小数或字典怎么办? 我是否必须以某种方式修改.proto文件并将数据压缩成不同的形状? (我将检查文件,看看我是否可以搞清楚)

3)人们可以想到还有其他陷阱吗? 二进制格式和类似的东西?

编辑我现在看了一个原型文件。 似乎.NET特定的东西被标记为例如bcl.DateTime或bcl.Decimal。 子类型包含在原型定义中。 不过,我不知道如何处理bcl类型。 如果我的c ++编程看到小数,它会怎么做?

  1. 是的,原型文件应该兼容。 外壳是关于约定的,它不应该影响实际的功能 - 只是生成的代码等。

  2. 不管.NET中是否存在直接可比类型是重要的 - 协议缓冲区是否支持重要的类型。 协议缓冲区大多非常原始 - 如果你想要构建更大的东西,你需要创建自己的消息。

  3. 协议缓冲区的目的是使它在线上都是二进制兼容的,所以真的不应该有问题...阅读文档以了解版本控制策略等。我唯一能想到的是在Java中至少版本,最好让枚举字段可选,并给枚举类型本身一个“未知”的零值,如果你试图反序列化一个新的值,这个值在反序列化代码中尚未得到支持。

Jon的一些小补充点:

  • protobuf-net v1确实有一个Getaproto可能有助于起点,但是,为了互操作目的,我建议从.proto开始; protobuf-net可以通过“protogen”或VS插件来解决这个问题
  • 除此之外,只要您记得将所有文件视为二进制文件,就不应该有我的问题; 在文本模式下打开文件会导致悲伤

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM