2014-03-02 51 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