BepInEx / HarmonyX

Harmony built on top of MonoMod.RuntimeDetours with additional features
MIT License
329 stars 42 forks source link

Cannot unpatch extern method patch #92

Open alexhaffner opened 7 months ago

alexhaffner commented 7 months ago

Hey! I'm using HarmonyX with unity (in editor directly), trying to patch & unpatch in play mode. After I call Harmony.UnpatchAll(); the methods still seems to be patched.

public class DestroyPatch
{
    [HarmonyPostfix]
    [HarmonyPatch(nameof(Object.Destroy), new Type[] { typeof(Object), typeof(float) })]
    public static void PrefixA(Object obj, float t)
    {
        Debug.Log("Destroy(Object obj, float t) called");
    }

    [HarmonyPostfix]
    [HarmonyPatch(nameof(Object.DestroyImmediate), new Type[] { typeof(Object), typeof(bool) })]
    public static void PrefixB(Object obj, bool allowDestroyingAssets)
    {
        Debug.Log("DestroyImmediate(Object obj, bool allowDestroyingAssets) called");
    }
}

Both are extern calls. I don't have issues with "normal" methods.

Looking into UnpatchConditional, it seems that HasMethodBody returns 0, and thus those methods are skipped and never unpatched.

Thanks!