#pragma once #include #include "il2cpp-blob.h" #include "il2cpp-metadata.h" struct Il2CppClass; struct MethodInfo; struct Il2CppType; typedef struct Il2CppArrayType { const Il2CppType* etype; uint8_t rank; uint8_t numsizes; uint8_t numlobounds; int *sizes; int *lobounds; } Il2CppArrayType; typedef struct Il2CppGenericInst { uint32_t type_argc; const Il2CppType **type_argv; } Il2CppGenericInst; typedef struct Il2CppGenericContext { /* The instantiation corresponding to the class generic parameters */ const Il2CppGenericInst *class_inst; /* The instantiation corresponding to the method generic parameters */ const Il2CppGenericInst *method_inst; } Il2CppGenericContext; typedef struct Il2CppGenericClass { const Il2CppType* type; /* the generic type definition */ Il2CppGenericContext context; /* a context that contains the type instantiation doesn't contain any method instantiation */ Il2CppClass *cached_class; /* if present, the Il2CppClass corresponding to the instantiation. */ } Il2CppGenericClass; typedef struct Il2CppGenericMethod { const MethodInfo* methodDefinition; Il2CppGenericContext context; } Il2CppGenericMethod; typedef struct Il2CppType { union { // We have this dummy field first because pre C99 compilers (MSVC) can only initializer the first value in a union. void* dummy; TypeDefinitionIndex __klassIndex; /* for VALUETYPE and CLASS at startup */ Il2CppMetadataTypeHandle typeHandle; /* for VALUETYPE and CLASS at runtime */ const Il2CppType *type; /* for PTR and SZARRAY */ Il2CppArrayType *array; /* for ARRAY */ //MonoMethodSignature *method; GenericParameterIndex __genericParameterIndex; /* for VAR and MVAR at startup */ Il2CppMetadataGenericParameterHandle genericParameterHandle; /* for VAR and MVAR at runtime */ Il2CppGenericClass *generic_class; /* for GENERICINST */ } data; unsigned int attrs : 16; /* param attributes or field flags */ Il2CppTypeEnum type : 8; unsigned int num_mods : 5; /* max 64 modifiers follow at the end */ unsigned int byref : 1; unsigned int pinned : 1; /* valid when included in a local var signature */ unsigned int valuetype : 1; //MonoCustomMod modifiers [MONO_ZERO_LEN_ARRAY]; /* this may grow */ } Il2CppType; typedef struct Il2CppMetadataFieldInfo { const Il2CppType* type; const char* name; uint32_t token; } Il2CppMetadataFieldInfo; typedef struct Il2CppMetadataMethodInfo { Il2CppMetadataMethodDefinitionHandle handle; const char* name; const Il2CppType* return_type; uint32_t token; uint16_t flags; uint16_t iflags; uint16_t slot; uint16_t parameterCount; } Il2CppMetadataMethodInfo; typedef struct Il2CppMetadataParameterInfo { const char* name; uint32_t token; const Il2CppType* type; } Il2CppMetadataParameterInfo; typedef struct Il2CppMetadataPropertyInfo { const char* name; const MethodInfo* get; const MethodInfo* set; uint32_t attrs; uint32_t token; } Il2CppMetadataPropertyInfo; typedef struct Il2CppMetadataEventInfo { const char* name; const Il2CppType* type; const MethodInfo* add; const MethodInfo* remove; const MethodInfo* raise; uint32_t token; } Il2CppMetadataEventInfo; typedef struct Il2CppInterfaceOffsetInfo { const Il2CppType* interfaceType; int32_t offset; } Il2CppInterfaceOffsetInfo; typedef struct Il2CppGenericParameterInfo { Il2CppMetadataGenericContainerHandle containerHandle; const char* name; uint16_t num; uint16_t flags; } Il2CppGenericParameterInfo;