67 lines
1.5 KiB
C#
67 lines
1.5 KiB
C#
using System;
|
|
using System.Runtime.InteropServices;
|
|
|
|
public class Test
|
|
{
|
|
[DllImport ("libtest", EntryPoint="mono_test_byvalstr_gen")]
|
|
public static extern IntPtr mono_test_byvalstr_gen();
|
|
|
|
[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 ()
|
|
{
|
|
string testString = "A small string";
|
|
|
|
IntPtr udata = mono_test_byvalstr_gen();
|
|
|
|
ByValStrStruct data = new ByValStrStruct();
|
|
data.a = testString;
|
|
|
|
Marshal.StructureToPtr(data, udata, false);
|
|
|
|
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;
|
|
}
|
|
}
|
|
|