X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Ftests%2Fmarshal.cs;h=1213f8c5cbf6ec4746c6d26c5157f403ef680bb1;hb=932a58ea407d6878d610cbe516d901293977aba1;hp=81af468afe116aa92e53996d654a074ddd5a9989;hpb=e8d226500ca705ff9387bf143361f91582b37a32;p=mono.git diff --git a/mono/tests/marshal.cs b/mono/tests/marshal.cs index 81af468afe1..1213f8c5cbf 100644 --- a/mono/tests/marshal.cs +++ b/mono/tests/marshal.cs @@ -8,12 +8,18 @@ using System.Runtime.InteropServices; public class Tests { + [AttributeUsage (AttributeTargets.Method)] + sealed class MonoPInvokeCallbackAttribute : Attribute { + public MonoPInvokeCallbackAttribute (Type t) {} + } + public static int Main (string[] args) { return TestDriver.RunTests (typeof (Tests), args); } public delegate int SimpleDelegate (int a); + [MonoPInvokeCallback (typeof (SimpleDelegate))] public static int delegate_test (int a) { return a + 1; @@ -25,13 +31,11 @@ public class Tests { [DllImport ("libtest", EntryPoint="mono_test_marshal_return_delegate")] public static extern IntPtr mono_test_marshal_return_delegate (SimpleDelegate d); - static int test_0_get_function_pointer_for_delegate () { - // This is a 2.0 feature - MethodInfo mi = typeof (Marshal).GetMethod ("GetFunctionPointerForDelegate"); - if (mi == null) - return 0; + [DllImport ("libtest", EntryPoint="mono_test_marshal_return_delegate_2")] + public static extern IntPtr mono_test_marshal_return_delegate_2 (); - IntPtr fnPtr = (IntPtr)mi.Invoke (null, new object [] { new SimpleDelegate (delegate_test)}); + static int test_0_get_function_pointer_for_delegate () { + IntPtr fnPtr = Marshal.GetFunctionPointerForDelegate (new SimpleDelegate (delegate_test)); if (mono_test_marshal_delegate (fnPtr) != 3) return 1; @@ -40,14 +44,18 @@ public class Tests { } static int test_0_get_delegate_for_function_pointer () { - // This is a 2.0 feature - MethodInfo mi = typeof (Marshal).GetMethod ("GetDelegateForFunctionPointer"); - if (mi == null) - return 0; - IntPtr ptr = mono_test_marshal_return_delegate (new SimpleDelegate (delegate_test)); - - SimpleDelegate d = (SimpleDelegate)mi.Invoke (null, new object [] { ptr, typeof (SimpleDelegate) }); + + SimpleDelegate d = (SimpleDelegate)Marshal.GetDelegateForFunctionPointer (ptr, typeof (SimpleDelegate)); + + return d (5) == 6 ? 0 : 1; + } + + /* Obtain a delegate from a native function pointer */ + static int test_0_get_delegate_for_ftnptr_native () { + IntPtr ptr = mono_test_marshal_return_delegate_2 (); + + SimpleDelegate d = (SimpleDelegate)Marshal.GetDelegateForFunctionPointer (ptr, typeof (SimpleDelegate)); return d (5) == 6 ? 0 : 1; }