Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用协议缓冲区连接c和c++;_C++_.net_Protocol Buffers_Protobuf Net - Fatal编程技术网

C++ 使用协议缓冲区连接c和c++;

C++ 使用协议缓冲区连接c和c++;,c++,.net,protocol-buffers,protobuf-net,C++,.net,Protocol Buffers,Protobuf Net,我有一个用c#编写的大型解决方案,它使用protobuf网络库进行通信。我想编写一个C++程序来与现有代码对话,我几乎能够看到如何去做。 计划如下: 1) 因为一切都是从c#开始的,所以没有.proto文件。但是,我可以很容易地编写一些代码,从现有的消息类(GetProto)中捕获.proto 2) 其中一些类型是非标准的,即它们是根据其他类型定义的:例如bcl.DateTime和bcl.Decimal。通过此链接,我可以找到以下定义: 3) 一旦我有了proto定义,我就可以运行Google代

我有一个用c#编写的大型解决方案,它使用protobuf网络库进行通信。我想编写一个C++程序来与现有代码对话,我几乎能够看到如何去做。 计划如下:

1) 因为一切都是从c#开始的,所以没有.proto文件。但是,我可以很容易地编写一些代码,从现有的消息类(GetProto)中捕获.proto

2) 其中一些类型是非标准的,即它们是根据其他类型定义的:例如bcl.DateTime和bcl.Decimal。通过此链接,我可以找到以下定义:

3) 一旦我有了proto定义,我就可以运行Google代码来生成我的类,这需要一些额外的代码来处理非标准的东西。没什么大不了的

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

repeated Pair_Decimal_Int32 MyDict = 1

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

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


对于datetimes,我建议考虑将其作为一种更简单的类型公开,以实现互操作——可能需要很长的时间(进入新纪元)。字典只是键(字段1)/值(字段2)的重复版本。十进制在原始protobuf中也没有很好的表示形式;如果可能,使用long(按固定值缩放)或double,依我看。

我猜
Pair\u Decimal\u Int32
只是一个简单的消息,有两个字段(a
double
和a
Int32
?),我猜它们被命名为“first”和“second”。协议缓冲区中没有通用的东西,在将消息处理到字典中时必须处理它。好吧,我想十进制应该是bcl.Decimal,Int32应该是映射到的任何东西。有道理。“为什么显而易见的事情会这样盯着我的脸看呢?”弗兰切斯卡是的,我上周的一个晚上写道。需要更多的测试,但通过最初的测试。好吧,把我当作你自己的个人测试器;我现在正在全职工作,如果我发现任何问题,我会告诉你的。@Franchesca注意到我还没有将其部署到nuget/google代码中;您将无法从源代码构建。如果你需要的话,我可以在今天晚些时候把一个包放在一起。啊,没关系,我已经把你的资料从主干上查出来了。目前,我将像这样使用它进行测试/调试,但一旦我在生产中使用它(这至少需要几周时间,所以不要着急),将它部署到nuget上就太棒了。谢谢@卡洛斯,正是我刚才说的:)注意,我说的是“protogen”,而不是“protoc”。