private static Il2CppMethodInfo *ConvertMethodInfo(MethodInfo monoMethod, INativeClassStruct declaringClass)
        {
            var converted = (Il2CppMethodInfo *)Marshal.AllocHGlobal(Marshal.SizeOf <Il2CppMethodInfo>());

            *converted = default;
            converted->name  = Marshal.StringToHGlobalAnsi(monoMethod.Name);
            converted->klass = declaringClass.ClassPointer;

            var parameters = monoMethod.GetParameters();

            if (parameters.Length > 0)
            {
                converted->parameters_count = (byte)parameters.Length;
                var paramsArray = (Il2CppParameterInfo *)Marshal.AllocHGlobal(Marshal.SizeOf <Il2CppParameterInfo>() * parameters.Length);
                converted->parameters = paramsArray;
                for (var i = 0; i < parameters.Length; i++)
                {
                    var parameterInfo = parameters[i];
                    paramsArray[i].name           = Marshal.StringToHGlobalAnsi(parameterInfo.Name);
                    paramsArray[i].position       = i;
                    paramsArray[i].token          = 0;
                    paramsArray[i].parameter_type = (Il2CppTypeStruct *)IL2CPP.il2cpp_class_get_type(ReadClassPointerForType(parameterInfo.ParameterType));
                }
            }

            converted->invoker_method = Marshal.GetFunctionPointerForDelegate(GetOrCreateInvoker(monoMethod));
            converted->methodPointer  = Marshal.GetFunctionPointerForDelegate(GetOrCreateTrampoline(monoMethod));
            converted->slot           = ushort.MaxValue;
            converted->return_type    = (Il2CppTypeStruct *)IL2CPP.il2cpp_class_get_type(ReadClassPointerForType(monoMethod.ReturnType));

            converted->flags = Il2CppMethodFlags.METHOD_ATTRIBUTE_PUBLIC |
                               Il2CppMethodFlags.METHOD_ATTRIBUTE_HIDE_BY_SIG;

            return(converted);
        }
        private static Il2CppMethodInfo *ConvertStaticMethod(VoidCtorDelegate voidCtor, string methodName, INativeClassStruct declaringClass)
        {
            var converted = (Il2CppMethodInfo *)Marshal.AllocHGlobal(Marshal.SizeOf <Il2CppMethodInfo>());

            *converted = default;
            converted->name  = Marshal.StringToHGlobalAnsi(methodName);
            converted->klass = declaringClass.ClassPointer;

            converted->invoker_method = Marshal.GetFunctionPointerForDelegate(new InvokerDelegate(StaticVoidIntPtrInvoker));
            converted->methodPointer  = Marshal.GetFunctionPointerForDelegate(voidCtor);
            converted->slot           = ushort.MaxValue;
            converted->return_type    = (Il2CppTypeStruct *)IL2CPP.il2cpp_class_get_type(Il2CppClassPointerStore <Void> .NativeClassPtr);

            converted->flags = Il2CppMethodFlags.METHOD_ATTRIBUTE_PUBLIC |
                               Il2CppMethodFlags.METHOD_ATTRIBUTE_HIDE_BY_SIG | Il2CppMethodFlags.METHOD_ATTRIBUTE_SPECIAL_NAME | Il2CppMethodFlags.METHOD_ATTRIBUTE_RT_SPECIAL_NAME;

            return(converted);
        }