public static byte[] StructToBytes(object structObj)
{
int size = Marshal.SizeOf(structObj);
byte[] _bytes = new byte[size];
IntPtr structPtr = Marshal.AllocHGlobal(size);
Marshal.StructureToPtr(structObj, structPtr, false);
Marshal.Copy(structPtr, _bytes, 0, size);
Marshal.FreeHGlobal(structPtr);
return _bytes;
}
public static byte[] StructToBytes2(object structObj1, object structObj2)
{
int size = Marshal.SizeOf(structObj1) + Marshal.SizeOf(structObj2);
byte[] _bytes = new byte[size];
IntPtr structPtr1 = Marshal.AllocHGlobal(Marshal.SizeOf(structObj1));
IntPtr structPtr2 = Marshal.AllocHGlobal(Marshal.SizeOf(structObj2));
Marshal.StructureToPtr(structObj1, structPtr1, false);
Marshal.StructureToPtr(structObj2, structPtr2, false);
Marshal.Copy(structPtr1, _bytes, 0, Marshal.SizeOf(structObj1));
Marshal.Copy(structPtr2, _bytes, Marshal.SizeOf(structObj1),
Marshal.SizeOf(structObj2));
Marshal.FreeHGlobal(structPtr1);
Marshal.FreeHGlobal(structPtr2);
return _bytes;
}