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)); }
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)); }