Пример #1
0
    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);
    }
Пример #2
0
    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);
    }
Пример #3
0
    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);
    }