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); }