public class Test
{
- [DllImport ("libtest.so", EntryPoint="mono_test_byvalstr_gen")]
+ [DllImport ("libtest", EntryPoint="mono_test_byvalstr_gen")]
public static extern IntPtr mono_test_byvalstr_gen();
- [DllImport ("libtest.so", EntryPoint="mono_test_byvalstr_check")]
+ [DllImport ("libtest", EntryPoint="mono_test_byvalstr_check")]
public static extern int mono_test_byvalstr_check(IntPtr data, string correctString);
+
+ [DllImport ("libtest", EntryPoint="mono_test_byvalstr_check_unicode")]
+ public static extern int mono_test_byvalstr_check_unicode(ref ByValStrStruct_Unicode var, int test);
[StructLayout (LayoutKind.Sequential)]
public struct ByValStrStruct
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=100)]
public string a;
}
+
+ [StructLayout (LayoutKind.Sequential, CharSet=CharSet.Unicode)]
+ public struct ByValStrStruct_Unicode
+ {
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst=4)]
+ public string a;
+
+ public int flag;
+ }
public unsafe static int Main ()
{
Marshal.StructureToPtr(data, udata, false);
- return mono_test_byvalstr_check(udata, testString);
+ int c = mono_test_byvalstr_check(udata, testString);
+ if (c != 0)
+ return 1;
+
+ ByValStrStruct_Unicode a = new ByValStrStruct_Unicode ();
+ a.flag = 0x1234abcd;
+ a.a = "1234";
+ c = mono_test_byvalstr_check_unicode (ref a, 1);
+ if (c != 0)
+ return 2;
+
+ a.a = "12";
+ c = mono_test_byvalstr_check_unicode (ref a, 2);
+ if (c != 0)
+ return 3;
+
+ a.a = "1234567890";
+ c = mono_test_byvalstr_check_unicode (ref a, 3);
+ if (c != 0)
+ return 4;
+
+ return 0;
}
}