|
@@ -160,15 +160,16 @@ namespace BepInEx.IL2CPP.Hook
|
|
|
|
|
|
|
|
|
|
|
|
+ var paramStartIndex = Original.IsStatic ? 0 : 1;
|
|
|
+
|
|
|
var managedParams = Original.GetParameters().Select(x => x.ParameterType).ToArray();
|
|
|
- var unmanagedParams = new Type[managedParams.Length + 2];
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- unmanagedParams[0] = typeof(IntPtr);
|
|
|
+ var unmanagedParams = new Type[managedParams.Length + 1];
|
|
|
+
|
|
|
+ if (Original.IsStatic)
|
|
|
+ unmanagedParams[0] = typeof(IntPtr);
|
|
|
unmanagedParams[unmanagedParams.Length - 1] = typeof(Il2CppMethodInfo*);
|
|
|
Array.Copy(managedParams.Select(ConvertManagedTypeToIL2CPPType).ToArray(), 0,
|
|
|
- unmanagedParams, 1, managedParams.Length);
|
|
|
+ unmanagedParams, paramStartIndex, managedParams.Length);
|
|
|
|
|
|
var managedReturnType = AccessTools.GetReturnedType(Original);
|
|
|
var unmanagedReturnType = ConvertManagedTypeToIL2CPPType(managedReturnType);
|
|
@@ -198,7 +199,7 @@ namespace BepInEx.IL2CPP.Hook
|
|
|
|
|
|
for (int i = 0; i < managedParams.Length; ++i)
|
|
|
{
|
|
|
- il.Emit(OpCodes.Ldarg_S, i + 1);
|
|
|
+ il.Emit(OpCodes.Ldarg_S, i + paramStartIndex);
|
|
|
EmitConvertArgumentToManaged(il, managedParams[i], out indirectVariables[i]);
|
|
|
}
|
|
|
|
|
@@ -225,7 +226,7 @@ namespace BepInEx.IL2CPP.Hook
|
|
|
if (indirectVariables[i] == null)
|
|
|
continue;
|
|
|
|
|
|
- il.Emit(OpCodes.Ldarg_S, i + 1);
|
|
|
+ il.Emit(OpCodes.Ldarg_S, i + paramStartIndex);
|
|
|
il.Emit(OpCodes.Ldloc, indirectVariables[i]);
|
|
|
|
|
|
EmitConvertManagedTypeToIL2CPP(il, managedParams[i].GetElementType());
|