2009-08-04 83 views
1

有没有简单的方法来序列化C#结构,然后从C++反序列化它。 我知道我们可以将csharp结构序列化为xml数据,但我必须在C++中实现xml解串器。将C#中的结构序列化为C++,反之亦然

什么样的C#中的序列化程序将是最简单的从C++反序列化? 我希望两个应用程序(一个C++和另一个csharp)能够使用数据结构进行通信

回答

0

Boost有serialization libraries允许XML,二进制和文本序列化。我想说这是一个非常简单的场景,你可以使用Boost在C++中序列化XML,并在C#中反序列化。

如果你希望有2个应用程序相互通信,我还建议考虑联网。 C#已建成插座,C++拥有的boost ::短耳,它很容易过度127.0.0.1 :)

希望帮助

4

这里有一类我写了一个.NET结构转换成一个阵列通信字节,它可以很容易地将它传递给C/C++库:

public static class BinaryStructConverter 
{ 
    public static T FromByteArray<T>(byte[] bytes) where T : struct 
    { 
     IntPtr ptr = IntPtr.Zero; 
     try 
     { 
      int size = Marshal.SizeOf(typeof(T)); 
      ptr = Marshal.AllocHGlobal(size); 
      Marshal.Copy(bytes, 0, ptr, size); 
      object obj = Marshal.PtrToStructure(ptr, typeof(T)); 
      return (T)obj; 
     } 
     finally 
     { 
      if (ptr != IntPtr.Zero) 
       Marshal.FreeHGlobal(ptr); 
     } 
    } 

    public static byte[] ToByteArray<T>(T obj) where T : struct 
    { 
     IntPtr ptr = IntPtr.Zero; 
     try 
     { 
      int size = Marshal.SizeOf(typeof(T)); 
      ptr = Marshal.AllocHGlobal(size); 
      Marshal.StructureToPtr(obj, ptr, true); 
      byte[] bytes = new byte[size]; 
      Marshal.Copy(ptr, bytes, 0, size); 
      return bytes; 
     } 
     finally 
     { 
      if (ptr != IntPtr.Zero) 
       Marshal.FreeHGlobal(ptr); 
     } 
    } 
} 
+0

好的代码在那里。我很想说这个不安全的等价物有点快,而且更具可读性。 :-) – Noldorin 2012-02-18 17:25:05