static void Via_GetFunctionPointer_Generics() { Console.WriteLine($"Running {nameof(Via_GetFunctionPointer_Generics)}..."); IntPtr fptr = typeof(A.Class).GetMethod("GetFieldGeneric").MakeGenericMethod(typeof(object)).MethodHandle.GetFunctionPointer(); Assert.NotEqual(IntPtr.Zero, fptr); var b = new Caller.Struct <object>() { Field = 0x55 }; int fieldValue = Caller.Class.CallGetField(b, fptr, null); Assert.Equal(b.Field, fieldValue); }
static void Via_Ldftn_Generics_EarlyLoad() { Console.WriteLine($"Running {nameof(Via_Ldftn_Generics_EarlyLoad)}..."); IntPtr fptr = B.Class.GetFunctionPointer <object>(); Assert.NotEqual(IntPtr.Zero, fptr); var b = new Caller.Struct <object>() { Field = 0x55 }; int fieldValue = Caller.Class.CallGetField(b, fptr, null); Assert.Equal(b.Field, fieldValue); }
static void Via_Ldvirtftn_Generics() { Console.WriteLine($"Running {nameof(Via_Ldvirtftn_Generics)}..."); object inst = new C.Derived(); IntPtr fptr = C.Class.GetFunctionPointerGeneric(inst); Assert.NotEqual(IntPtr.Zero, fptr); var b = new Caller.Struct <object>() { Field = 0x55 }; int fieldValue = Caller.Class.CallGetField(b, fptr, inst); Assert.Equal(b.Field, fieldValue); }