HarmonyX icon indicating copy to clipboard operation
HarmonyX copied to clipboard

Cannot unpatch extern method patch

Open alexhaffner opened this issue 7 months ago • 0 comments

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!

alexhaffner avatar Nov 30 '23 21:11 alexhaffner