2 using System
.Runtime
.InteropServices
;
4 [StructLayout(LayoutKind
.Sequential
)]
10 [StructLayout(LayoutKind
.Explicit
)]
13 [FieldOffset(0)] public int i1
;
14 [FieldOffset(0)] public int i2
;
17 [StructLayout(LayoutKind
.Sequential
)]
25 /* various small structs for testing struct-by-value where they are handled specially
28 [StructLayout(LayoutKind
.Sequential
)]
34 [StructLayout(LayoutKind
.Sequential
)]
42 [StructLayout(LayoutKind
.Sequential
)]
58 public struct NestedFloat
{
64 [StructLayout(LayoutKind
.Sequential
)]
65 public struct Rectangle
72 public Rectangle(int x
, int y
, int width
, int height
)
82 public struct Scalar4
{
88 public Scalar4 (double v0
, double v1
, double v2
, double v3
) {
98 [DllImport ("libtest")]
99 public static extern int mono_union_test_1 (cs a
);
101 [DllImport ("libtest")]
102 public static extern int mono_return_int (int a
);
104 [DllImport ("libtest", EntryPoint
="mono_return_int_ss")]
105 public static extern int mono_return_int_ss (ss a
);
107 [DllImport ("libtest", EntryPoint
="mono_return_ss")]
108 public static extern ss
mono_return_ss (ss a
);
110 [DllImport ("libtest", EntryPoint
="mono_return_sc1")]
111 public static extern sc1
mono_return_sc1 (sc1 a
);
113 [DllImport ("libtest", EntryPoint
="mono_return_sc3")]
114 public static extern sc3
mono_return_sc3 (sc3 a
);
116 [DllImport ("libtest", EntryPoint
="mono_return_sc5")]
117 public static extern sc5
mono_return_sc5 (sc5 a
);
119 [DllImport ("libtest", EntryPoint
="mono_return_int_su")]
120 public static extern int mono_return_int_su (su a
);
122 [DllImport ("libtest", EntryPoint
="mono_return_nested_float")]
123 public static extern NestedFloat
mono_return_nested_float ();
125 [DllImport("libtest", EntryPoint
="mono_return_struct_4_double")]
126 [return: MarshalAs(UnmanagedType
.LPStr
)]
127 public static extern string mono_return_struct_4_double (IntPtr ptr
, Rectangle rect
, Scalar4 sc4
, int a
, int b
, int c
);
131 if (mono_return_int (5) != 5)
136 if (mono_return_int_ss (s1
) != 4)
139 s1
= mono_return_ss (s1
);
146 if (mono_return_int_su (s2
) != 3)
150 if (mono_return_int_su (s2
) != 2)
160 if (mono_union_test_1 (s3
) != 13)
164 if (mono_union_test_1 (s3
) != 14)
168 if (mono_union_test_1 (s3
) != 15)
173 s4
= mono_return_sc1(s4
);
181 s5
= mono_return_sc3(s5
);
182 if (s5
.c0
!= 5 || s5
.c1
!= 7 || s5
.c2
!= 9)
191 s6
= mono_return_sc5(s6
);
192 if (s6
.c0
!= 5 || s6
.c1
!= 7 || s6
.c2
!= 9 || s6
.c3
!= 11 || s6
.c4
!= 13)
195 var f
= mono_return_nested_float ();
199 Rectangle rect
= new Rectangle (10, 10, 100, 20);
200 Scalar4 sc4
= new Scalar4 (32, 64, 128, 256);
201 var sc4_ret
= mono_return_struct_4_double (IntPtr
.Zero
, rect
, sc4
, 0x1337, 0x1234, 0x9876);
202 if (sc4_ret
!= "sc4 = {32.0, 64.0, 128.0, 256.0 }, a=1337, b=1234, c=9876\n") {
203 Console
.WriteLine ("sc4_ret = " + sc4_ret
);