有没有简单的方法来序列化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