2009-08-04 90 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