2007-07-05 Zoltan Varga <vargaz@gmail.com>
authorZoltan Varga <vargaz@gmail.com>
Thu, 5 Jul 2007 20:23:08 +0000 (20:23 -0000)
committerZoltan Varga <vargaz@gmail.com>
Thu, 5 Jul 2007 20:23:08 +0000 (20:23 -0000)
* pinvoke3.cs libtest.c: Add new test for returning unicode strings from a delegate.

svn path=/trunk/mono/; revision=81434

mono/tests/ChangeLog
mono/tests/libtest.c
mono/tests/pinvoke3.cs

index b2e71397e2227a9de401153dcfd8b61ef6bf3234..8297074910fe762294397720a7d1ab7a12f19c36 100644 (file)
@@ -1,3 +1,7 @@
+2007-07-05  Zoltan Varga  <vargaz@gmail.com>
+
+       * pinvoke3.cs libtest.c: Add new test for returning unicode strings from a delegate.
+
 2007-06-12  Zoltan Varga  <vargaz@gmail.com>
 
        * pinvoke2.cs: Add test for instance delegates.
index 90e9a29a8c74749bdc2bb90791c62ffe3d96dd40..34e4ae914ed953839433c53697f4f67f74506e3c 100644 (file)
@@ -1887,6 +1887,22 @@ mono_test_marshal_out_array_delegate (int *arr, int len, ArrayDelegate del)
                return 0;
 }
 
+typedef gunichar2* (STDCALL *UnicodeStringDelegate) (gunichar2 *message);
+
+STDCALL int
+mono_test_marshal_return_unicode_string_delegate (UnicodeStringDelegate del)
+{
+       const char m[] = "abcdef";
+       gunichar2 *s2, *res;
+       glong len;
+
+       s2 = g_utf8_to_utf16 (m, -1, NULL, &len, NULL);
+
+       res = del (s2);
+
+       marshal_free (res);
+}
+
 STDCALL int
 mono_test_marshal_out_string_array_delegate (char **arr, int len, ArrayDelegate del)
 {
index c9821b1704fbb0e79e9b802bf9d029eae322079c..981f542968455794f54d8d14c3ba8c2a7ef261e2 100644 (file)
@@ -873,6 +873,23 @@ public class Tests {
                return mono_test_marshal_inout_byval_class_delegate (new InOutByvalClassDelegate (delegate_test_byval_class_inout));
        }
 
+       /*
+        * Returning unicode strings
+        */
+       [return: MarshalAs(UnmanagedType.LPWStr)]
+       public delegate string ReturnUnicodeStringDelegate([MarshalAs(UnmanagedType.LPWStr)] string message);
+
+       [DllImport ("libtest", EntryPoint="mono_test_marshal_return_unicode_string_delegate")]
+       public static extern int mono_test_marshal_return_unicode_string_delegate (ReturnUnicodeStringDelegate d);
+
+       public static String return_unicode_string_delegate (string message) {
+               return message;
+       }
+
+       public static int test_0_marshal_return_unicode_string_delegate () {    
+               return mono_test_marshal_return_unicode_string_delegate (new ReturnUnicodeStringDelegate (return_unicode_string_delegate));
+       }
+
        /*
         * Returning string arrays
         */