45 lines
825 B
C#
45 lines
825 B
C#
using System;
|
|
using System.Runtime.InteropServices;
|
|
|
|
public class Test {
|
|
|
|
|
|
[StructLayout (LayoutKind.Sequential)]
|
|
public struct BlittableStruct {
|
|
public int a;
|
|
public int b;
|
|
}
|
|
|
|
public unsafe static int Main () {
|
|
BlittableStruct ss = new BlittableStruct ();
|
|
int size = Marshal.SizeOf (typeof (BlittableStruct));
|
|
|
|
Console.WriteLine ("BlittableStruct:" + size);
|
|
if (size != 8)
|
|
return 1;
|
|
|
|
IntPtr p = Marshal.AllocHGlobal (size);
|
|
ss.a = 123;
|
|
ss.b = 124;
|
|
|
|
Marshal.StructureToPtr (ss, p, false);
|
|
Type t = ss.GetType ();
|
|
|
|
if (Marshal.ReadInt32 (p, 0) != 123)
|
|
return 1;
|
|
if (Marshal.ReadInt32 (p, 4) != 124)
|
|
return 1;
|
|
|
|
BlittableStruct cp = (BlittableStruct)Marshal.PtrToStructure (p, ss.GetType ());
|
|
|
|
if (cp.a != 123)
|
|
return 2;
|
|
|
|
if (cp.b != 124)
|
|
return 2;
|
|
|
|
return 0;
|
|
}
|
|
}
|
|
|