@@ -618,14 +618,21 @@ private void AddVTableMethod(StructInfo structInfo, Il2CppTypeDefinition typeDef
618
618
{
619
619
methodDef = metadata . methodDefs [ index ] ;
620
620
}
621
- dic [ methodDef . slot ] = methodDef ;
621
+ if ( methodDef . slot != ushort . MaxValue )
622
+ {
623
+ dic [ methodDef . slot ] = methodDef ;
624
+ }
622
625
}
623
- foreach ( var i in dic )
626
+ if ( typeDef . vtable_count > 0 )
624
627
{
625
- var methodInfo = new StructVTableMethodInfo ( ) ;
626
- structInfo . VTableMethod . Add ( methodInfo ) ;
627
- var methodDef = i . Value ;
628
- methodInfo . MethodName = $ "_{ methodDef . slot } _{ FixName ( metadata . GetStringFromIndex ( methodDef . nameIndex ) ) } ";
628
+ structInfo . VTableMethod = new StructVTableMethodInfo [ dic . Last ( ) . Key + 1 ] ;
629
+ foreach ( var i in dic )
630
+ {
631
+ var methodInfo = new StructVTableMethodInfo ( ) ;
632
+ structInfo . VTableMethod [ i . Key ] = methodInfo ;
633
+ var methodDef = i . Value ;
634
+ methodInfo . MethodName = $ "{ FixName ( metadata . GetStringFromIndex ( methodDef . nameIndex ) ) } ";
635
+ }
629
636
}
630
637
}
631
638
@@ -842,9 +849,19 @@ private string RecursionStructInfo(StructInfo info)
842
849
sb . Append ( "};\n " ) ;
843
850
844
851
sb . Append ( $ "struct { info . TypeName } _VTable {{\n ") ;
845
- foreach ( var method in info . VTableMethod )
852
+ for ( int i = 0 ; i < info . VTableMethod . Length ; i ++ )
846
853
{
847
- sb . Append ( $ "\t VirtualInvokeData { method . MethodName } ;\n ") ;
854
+ sb . Append ( $ "\t VirtualInvokeData _{ i } _") ;
855
+ var method = info . VTableMethod [ i ] ;
856
+ if ( method != null )
857
+ {
858
+ sb . Append ( method . MethodName ) ;
859
+ }
860
+ else
861
+ {
862
+ sb . Append ( "unknown" ) ;
863
+ }
864
+ sb . Append ( ";\n " ) ;
848
865
}
849
866
sb . Append ( "};\n " ) ;
850
867
0 commit comments