簡體   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