@@ -144,7 +144,7 @@ unsafe public static int TypeTreeGenerator_generateTypeTreeNodesJson(IntPtr type
144144
145145 [ UnmanagedCallersOnly ( EntryPoint = "TypeTreeGenerator_generateTreeNodesRaw" ) ]
146146 unsafe public static int TypeTreeGenerator_generateTypeTreeNodesRaw ( IntPtr typeTreeGeneratorPtr , IntPtr assemblyNamePtr , IntPtr fullNamePtr , IntPtr arrAddrPtr , IntPtr arrLengthPtr )
147- {
147+ {
148148 string ? assemblyName = Marshal . PtrToStringUTF8 ( assemblyNamePtr ) ;
149149 string ? fullName = Marshal . PtrToStringUTF8 ( fullNamePtr ) ;
150150
@@ -154,19 +154,15 @@ unsafe public static int TypeTreeGenerator_generateTypeTreeNodesRaw(IntPtr typeT
154154 }
155155 try
156156 {
157- var typeTreeGenerator = ( TypeTreeGenerator ) GCHandle . FromIntPtr ( typeTreeGeneratorPtr ) . Target ! ;
158-
157+ var typeTreeGenerator = ( TypeTreeGenerator ) GCHandle . FromIntPtr ( typeTreeGeneratorPtr ) . Target ! ;
159158 var typeTreeNodes = typeTreeGenerator . GenerateTreeNodes ( assemblyName , fullName ) ;
160159 if ( typeTreeNodes == null )
161160 {
162161 return - 1 ;
163162 }
164163 var ( arrayPtr , arrayLength ) = TypeTreeNodeSerializer . ToRaw ( typeTreeNodes ! ) ;
165164
166- // Write the JSON pointer to the address specified by `jsonAddr`
167165 Marshal . WriteIntPtr ( arrAddrPtr , arrayPtr ) ;
168-
169- // Write the JSON length to the address specified by `jsonLength`
170166 Marshal . WriteInt32 ( arrLengthPtr , arrayLength ) ;
171167
172168 return 0 ;
@@ -177,6 +173,39 @@ unsafe public static int TypeTreeGenerator_generateTypeTreeNodesRaw(IntPtr typeT
177173 }
178174 }
179175
176+ [ UnmanagedCallersOnly ( EntryPoint = "TypeTreeGenerator_getMonoBehaviorDefinitions" ) ]
177+ unsafe public static int TypeTreeGenerator_getMonoBehaviorDefinitions ( IntPtr typeTreeGeneratorPtr , IntPtr arrAddrPtr , IntPtr arrLengthPtr )
178+ {
179+ if ( typeTreeGeneratorPtr == IntPtr . Zero )
180+ {
181+ return - 1 ;
182+ }
183+ try
184+ {
185+ var typeTreeGenerator = ( TypeTreeGenerator ) GCHandle . FromIntPtr ( typeTreeGeneratorPtr ) . Target ! ;
186+
187+ var typeNames = typeTreeGenerator . GetMonoBehaviourDefinitions ( ) ;
188+
189+ var arrayLength = typeNames . Count ;
190+ var arrayPtr = Marshal . AllocCoTaskMem ( Marshal . SizeOf < IntPtr > ( ) * arrayLength * 2 ) ;
191+ for ( int i = 0 ; i < arrayLength ; i ++ )
192+ {
193+ string module = typeNames [ i ] . Module . Name ;
194+ string fullName = typeNames [ i ] . FullName ;
195+ Marshal . WriteIntPtr ( arrayPtr , ( i * 2 ) * Marshal . SizeOf < IntPtr > ( ) , Marshal . StringToCoTaskMemAnsi ( module ) ) ;
196+ Marshal . WriteIntPtr ( arrayPtr , ( i * 2 + 1 ) * Marshal . SizeOf < IntPtr > ( ) , Marshal . StringToCoTaskMemAnsi ( fullName ) ) ;
197+ }
198+
199+ Marshal . WriteIntPtr ( arrAddrPtr , arrayPtr ) ;
200+ Marshal . WriteInt32 ( arrLengthPtr , arrayLength ) ;
201+
202+ return 0 ;
203+ }
204+ catch
205+ {
206+ return - 1 ;
207+ }
208+ }
180209 [ UnmanagedCallersOnly ( EntryPoint = "FreeCoTaskMem" ) ]
181210 public static void FreeCoTaskMem ( IntPtr ptr )
182211 {
0 commit comments