2014-03-02 42 views
0

我需要將相當複雜的數據結構從C#傳遞到本機C++函數。這是一種結構,除了簡單的數據類型,如ints和strings,還包含其他結構的數組,其中包含其他結構的數組...等等,深達3或4級。我最初的想法是使用固定指針,但現在我開始懷疑這是一個好主意。代碼很雜亂,我保留了很長時間的大量對象。我不得不說,C++代碼可能需要幾個小時才能完成。將複雜的對象從C#傳遞到C++

現在我的問題。使用谷歌的protocol buffers來序列化C#中的數據結構,把它放入一個連續的內存緩衝區,然後用C++反序列化它會是一個好主意嗎?

其他建議?

回答

0

另一種選擇是使用Marshal類來將數據分配和寫入到複雜結構中。例如,您可以使用AllocHGlobal來分配緩衝區,然後使用各種複製和寫入功能,使用任何您想要的內存佈局將數據寫入此緩衝區。這可以讓你保持你的C++代碼不變。

0

我會建議一個常見的序列化/反序列化,如XML。當然,一些方法(如XML序列化)只會序列化對象的公共屬性,因此請適當選擇。

0

你有幾個選擇。

COM,託管C++,二進制序列化和編組。如果可移植性不是問題,我會去託管C++。第二 - 二進制序列化。更容易維護。

所以,協議緩衝區絕對是一個可行的解決方案。

+0

我不能使用COM和託管C++,因爲代碼也應該在Linux上運行。 – Max

+0

然後二進制序列化是唯一明智的選擇。去協議緩衝區,隊友。 – JonPall