+ public delegate int ArrayDelegate8 (int i, string j,
+ [In, MarshalAs(UnmanagedType.LPArray,
+ SizeParamIndex=0)]
+ int[] arr);
+
+ [DllImport ("libtest", EntryPoint="mono_test_marshal_array_delegate")]
+ public static extern int mono_test_marshal_array_delegate8 (int[] arr, int len, ArrayDelegate8 d);
+
+ public static int array_delegate8 (int i, string j, int[] arr) {
+ if (arr.Length != 2)
+ return 1;
+ if ((arr [0] != 42) || (arr [1] != 43))
+ return 2;
+ return 0;
+ }
+
+ public static int test_0_marshal_array_delegate_blittable () {
+ int[] arr = new int [] { 42, 43 };
+ return mono_test_marshal_array_delegate8 (arr, 2, new ArrayDelegate8 (array_delegate8));
+ }
+
+ /*
+ * [Out] blittable arrays
+ */
+
+ public delegate int ArrayDelegate9 (int i, string j,
+ [Out, MarshalAs(UnmanagedType.LPArray,
+ SizeParamIndex=0)]
+ int[] arr);
+
+ [DllImport ("libtest", EntryPoint="mono_test_marshal_out_array_delegate")]
+ public static extern int mono_test_marshal_out_array_delegate (int[] arr, int len, ArrayDelegate9 d);
+
+ public static int array_delegate9 (int i, string j, int[] arr) {
+ if (arr.Length != 2)
+ return 1;
+
+ arr [0] = 1;
+ arr [1] = 2;
+
+ return 0;
+ }
+
+ public static int test_0_marshal_out_array_delegate () {
+ int[] arr = new int [] { 42, 43 };
+ return mono_test_marshal_out_array_delegate (arr, 2, new ArrayDelegate9 (array_delegate9));
+ }
+
+ /*
+ * [Out] string arrays
+ */
+
+ public delegate int ArrayDelegate10 (int i,
+ string j,
+ [Out, MarshalAs(UnmanagedType.LPArray,
+ ArraySubType=UnmanagedType.LPStr, SizeConst=2)] string[] arr);
+
+ [DllImport ("libtest", EntryPoint="mono_test_marshal_out_string_array_delegate")]
+ public static extern int mono_test_marshal_out_string_array_delegate (string[] arr, int len, ArrayDelegate10 d);
+
+ public static int array_delegate10 (int i, string j, string[] arr) {
+ if (arr.Length != 2)
+ return 1;
+
+ arr [0] = "ABC";
+ arr [1] = "DEF";
+
+ return 0;
+ }
+
+ public static int test_0_marshal_out_string_array_delegate () {
+ string[] arr = new string [] { "", "" };
+ return mono_test_marshal_out_string_array_delegate (arr, 2, new ArrayDelegate10 (array_delegate10));
+ }
+
+ /*
+ * Returning string arrays
+ */
+ public delegate string[] ReturnArrayDelegate (int i);
+
+ [DllImport ("libtest", EntryPoint="mono_test_marshal_return_string_array_delegate")]
+ public static extern int mono_test_marshal_return_string_array_delegate (ReturnArrayDelegate d);
+
+ public static String[] return_array_delegate (int i) {
+ String[] arr = new String [2];
+
+ arr [0] = "ABC";
+ arr [1] = "DEF";
+
+ return arr;
+ }
+
+ public static String[] return_array_delegate_null (int i) {
+ return null;
+ }
+
+ public static int test_0_marshal_return_string_array_delegate () {
+ return mono_test_marshal_return_string_array_delegate (new ReturnArrayDelegate (return_array_delegate));
+ }
+
+ public static int test_3_marshal_return_string_array_delegate_null () {
+ return mono_test_marshal_return_string_array_delegate (new ReturnArrayDelegate (return_array_delegate_null));
+ }
+