mirror of
https://github.com/avast/ioc
synced 2024-06-20 22:08:34 +00:00
43 lines
1.3 KiB
C#
43 lines
1.3 KiB
C#
ParameterInfo[] parameters = methodInfo.GetParameters();
|
|
int num24 = parameters.Length + 1;
|
|
Type[] array3 = new Type[num24];
|
|
if (methodInfo.DeclaringType.IsValueType)
|
|
{
|
|
array3[0] = methodInfo.DeclaringType.MakeByRefType();
|
|
}
|
|
else
|
|
{
|
|
array3[0] = Type.GetTypeFromHandle(YMn.GetRuntimeTypeHandleFromMetadataToken(16777235));//T:System.Drawing.Imaging.ImageCodecInfo
|
|
}
|
|
for (int n = 0; n < parameters.Length; n++)
|
|
{
|
|
array3[n + 1] = parameters[n].ParameterType;
|
|
}
|
|
DynamicMethod dynamicMethod = new DynamicMethod(string.Empty, methodInfo.ReturnType, array3, typeFromHandle, true);
|
|
ILGenerator ilgenerator = dynamicMethod.GetILGenerator();
|
|
for (int num25 = 0; num25 < num24; num25++)
|
|
{
|
|
switch (num25)
|
|
{
|
|
case 0:
|
|
ilgenerator.Emit(OpCodes.Ldarg_0);
|
|
break;
|
|
case 1:
|
|
ilgenerator.Emit(OpCodes.Ldarg_1);
|
|
break;
|
|
case 2:
|
|
ilgenerator.Emit(OpCodes.Ldarg_2);
|
|
break;
|
|
case 3:
|
|
ilgenerator.Emit(OpCodes.Ldarg_3);
|
|
break;
|
|
default:
|
|
ilgenerator.Emit(OpCodes.Ldarg_S, num25);
|
|
break;
|
|
}
|
|
}
|
|
ilgenerator.Emit(OpCodes.Tailcall);
|
|
ilgenerator.Emit(flag2 ? OpCodes.Callvirt : OpCodes.Call, methodInfo);
|
|
ilgenerator.Emit(OpCodes.Ret);
|
|
fieldInfo.SetValue(null, dynamicMethod.CreateDelegate(typeFromHandle));
|