using System; using System.Collections.Generic; using ILRuntime.Runtime.Intepreter; using ILRuntime.Runtime.Stack; using ILRuntime.CLR.Method; using ILRuntime.CLR.TypeSystem; using System.Reflection; using ILRuntime.CLR.Utils; using FairyGUI; using UnityEngine; namespace GFGGame { public class ILRuntimeHelper { public unsafe static void RegisterILRuntimeCLRRedirection(ILRuntime.Runtime.Enviorment.AppDomain appdomain) { //重定向 LitJson.JsonMapper.RegisterILRuntimeCLRRedirection(appdomain); CLRMethod(appdomain); } private unsafe static void CLRMethod(ILRuntime.Runtime.Enviorment.AppDomain appdomain) { BindingFlags flag = BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static | BindingFlags.DeclaredOnly; MethodBase method; Type[] args; Type type = typeof(FairyGUI.UIObjectFactory); args = new Type[] { typeof(System.String), typeof(System.Type) }; method = type.GetMethod("SetPackageItemExtension", flag, null, args, null); appdomain.RegisterCLRMethodRedirection(method, SetPackageItemExtension_0); } private unsafe static StackObject* SetPackageItemExtension_0(ILIntepreter __intp, StackObject* __esp, IList __mStack, CLRMethod __method, bool isNewObj) { ILRuntime.Runtime.Enviorment.AppDomain __domain = __intp.AppDomain; StackObject* ptr_of_this_method; StackObject* __ret = ILIntepreter.Minus(__esp, 2); ptr_of_this_method = ILIntepreter.Minus(__esp, 1); System.Type @type = (System.Type)typeof(System.Type).CheckCLRTypes(StackObject.ToObject(ptr_of_this_method, __domain, __mStack)); __intp.Free(ptr_of_this_method); ptr_of_this_method = ILIntepreter.Minus(__esp, 2); System.String @url = (System.String)typeof(System.String).CheckCLRTypes(StackObject.ToObject(ptr_of_this_method, __domain, __mStack)); __intp.Free(ptr_of_this_method); FairyGUI.UIObjectFactory.SetPackageItemExtension(@url, () => { Debug.Log("il test " + @type.FullName); return __domain.Instantiate(@type.FullName); }); // FairyGUI.UIObjectFactory.SetPackageItemExtension (@url, @type); return __ret; } } }