有沒有簡單的方法來序列化C#結構,然後從C++反序列化它。 我知道我們可以將csharp結構序列化爲xml數據,但我必須在C++中實現xml解串器。將C#中的結構序列化爲C++,反之亦然
什麼樣的C#中的序列化程序將是最簡單的從C++反序列化? 我希望兩個應用程序(一個C++和另一個csharp)能夠使用數據結構進行通信
有沒有簡單的方法來序列化C#結構,然後從C++反序列化它。 我知道我們可以將csharp結構序列化爲xml數據,但我必須在C++中實現xml解串器。將C#中的結構序列化爲C++,反之亦然
什麼樣的C#中的序列化程序將是最簡單的從C++反序列化? 我希望兩個應用程序(一個C++和另一個csharp)能夠使用數據結構進行通信
Boost有serialization libraries允許XML,二進制和文本序列化。我想說這是一個非常簡單的場景,你可以使用Boost在C++中序列化XML,並在C#中反序列化。
如果你希望有2個應用程序相互通信,我還建議考慮聯網。 C#已建成插座,C++擁有的boost ::短耳,它很容易過度127.0.0.1 :)
希望幫助
這裏有一類我寫了一個.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);
}
}
}
好的代碼在那裏。我很想說這個不安全的等價物有點快,而且更具可讀性。 :-) – Noldorin 2012-02-18 17:25:05