【问题标题】:How can I use Mono.Cecil to call a generic method如何使用 Mono.Cecil 调用泛型方法
【发布时间】:2018-03-08 19:01:45
【问题描述】:

我正在尝试导入一个方法及其 IL 代码,例如
callvirt instance !!0 [UnityEngine]UnityEngine.GameObject::AddComponent<class RealMono>()
RealMono 是我创建的 MonoBehavior
我不知道获得通用方法。

【问题讨论】:

    标签: il mono.cecil


    【解决方案1】:

    有效!!

    using System.Reflection;
    
    ...
    
    MemberInfo[] ms = typeof(GameObject).GetMember("AddComponent*", BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Instance);
    MethodInfo mm = null;
    foreach(MemberInfo m in ms) {
        if (((MethodInfo)m).IsGenericMethod) {
            mm = (MethodInfo)m;
            mm = mm.MakeGenericMethod(mm);
            break;
        }
    }
    il.InsertBefore(method.Body.Instructions[0], il.Create(OpCodes.Callvirt, assembly.MainModule.Import(mm)));
    

    【讨论】:

      猜你喜欢
      • 2011-05-18
      • 2014-11-27
      相关资源
      最近更新 更多