2

我有一个用 c# 编写的大型解决方案,它使用 protobuf-net 库进行通信。我正在寻找编写一个 c++ 程序来与现有代码对话,并且我已经接近能够看到如何做到这一点。

这是计划:

1) 由于一切都是在 c# 中启动的,因此没有 .proto 文件。但是,我可以轻松编写一些从现有消息类 (GetProto) 中捕获 .proto 的代码。

2) 一些类型是非标准的,即它们是根据其他类型定义的:例如,bcl.DateTime 和 bcl.Decimal。使用此链接,我能够找到定义:Protobuf-net - serializing .NET GUID - how to read this in C++?

3)一旦我有了原型定义,我就可以运行谷歌代码来生成我的类,这需要一些额外的代码来处理非标准的东西。没有大碍。

我目前唯一的问题是字典/地图的格式。它们看起来像这样:

repeated Pair_Decimal_Int32 MyDict = 1

我需要知道的是这种特殊类型是如何定义的。它当然与泛型相关联(取决于字典),所以也许有特殊的代码可以生成它?我不太清楚它在 protobuf-net 中的哪个位置处理这个问题,所以我正在寻求帮助。

4

1 回答 1

1

请注意,v2 中的 GetProto 是非常新实现的(如:几天前)并且可能有粗糙的边缘(它被标记为这样)。

对于日期时间,我建议考虑将它们公开为一种更简单的类型,以实现互操作 - 可能很长(进入时代)。字典只是键(字段 1)/值(字段 2)的重复版本。Decimal 在原始 protobuf 中也没有很好的表示;如果可能,请使用 long(按固定值缩放)或 double,IMO。

于 2012-07-23T13:57:40.653 回答