コード例 #1
0
    static Buffer()
    {
        var methods = typeof(System.Buffer).GetMethods(BindingFlags.Static | BindingFlags.NonPublic).Where(m => m.Name == "Memcpy");
        var memcpy  = methods.First(mi => mi.GetParameters().Select(p => p.ParameterType).SequenceEqual(new[] { typeof(byte *), typeof(byte *), typeof(int) }));

        Memcpy = (MemcpyDelegate)memcpy.CreateDelegate(typeof(MemcpyDelegate));
    }
コード例 #2
0
ファイル: Utils.cs プロジェクト: etsangsplk/SewingMachine
        static Utils()
        {
            var types  = new[] { typeof(byte *), typeof(byte *), typeof(int) };
            var method = typeof(Buffer).GetMethod("Memcpy", BindingFlags.NonPublic | BindingFlags.Static, null, types, null);
            var dm     = new DynamicMethod("dm_Memcpy", typeof(void), types, typeof(Buffer).Module, true);

            var il = dm.GetILGenerator();

            il.Emit(OpCodes.Ldarg_0);
            il.Emit(OpCodes.Ldarg_1);
            il.Emit(OpCodes.Ldarg_2);
            il.EmitCall(OpCodes.Call, method, null);
            il.Emit(OpCodes.Ret);

            Memcpy = (MemcpyDelegate)dm.CreateDelegate(typeof(MemcpyDelegate));
        }