Esempio n. 1
0
        public static void Invoke(IntPtr method, IntPtr instance, object[] args)
        {
            // Check method
            if (method == IntPtr.Zero)
            {
                return;
            }

            // Get method structure and invoker
            CachedInvoker invoker = null;

            if (!_Invokers.TryGetValue(method, out invoker))
            {
                IL2CPPMethod            il2cppMethod  = (IL2CPPMethod)Marshal.PtrToStructure(method, typeof(IL2CPPMethod));
                NativeSDK.IL2CPPInvoker il2cppInvoker = (NativeSDK.IL2CPPInvoker)Marshal.GetDelegateForFunctionPointer(il2cppMethod.Invoker, typeof(NativeSDK.IL2CPPInvoker));

                invoker = new CachedInvoker(il2cppInvoker, il2cppMethod);
                _Invokers.Add(method, invoker);
            }

            // Convert parameters
            IntPtr[] argPtrs = new IntPtr[args.Length];
            for (uint i = 0; i < args.Length; i++)
            {
                Type   _type     = args[i].GetType();
                IntPtr _assembly = MapAssembly(_type.Assembly.GetName().Name);

                argPtrs[i] = NativeSDK.ConvertToIntPtr(args[i], MapType(_assembly, (uint)_type.MetadataToken));
            }

            // Invoke
            invoker.Invoker(invoker.Method.ptr, method, instance, argPtrs);
        }
Esempio n. 2
0
 public CachedInvoker(NativeSDK.IL2CPPInvoker invoker, IL2CPPMethod method)
 {
     Invoker = invoker;
     Method  = method;
 }