1- using AssetStudio ;
2- using System . Runtime . InteropServices ;
1+ using System . Runtime . InteropServices ;
2+ using TypeTreeGeneratorAPI . TypeTreeGenerator ;
33
44namespace TypeTreeGeneratorAPI
55{
66 public static class NativeAPI
77 {
88 [ UnmanagedCallersOnly ( EntryPoint = "TypeTreeGenerator_init" ) ]
9- public static IntPtr TypeTreeGenerator_create ( IntPtr unityVersionPtr )
9+ public static IntPtr TypeTreeGenerator_create ( IntPtr unityVersionPtr , IntPtr generatorName )
1010 {
1111 string ? unityVersion = Marshal . PtrToStringUTF8 ( unityVersionPtr ) ;
12+ string ? generatorNameStr = Marshal . PtrToStringUTF8 ( generatorName ) ;
1213 if ( unityVersion == null )
1314 {
1415 return IntPtr . Zero ;
1516 }
1617 try
1718 {
18- var typeTreeGenerator = new TypeTreeGenerator_AssetStudio ( unityVersion ) ;
19- return GCHandle . ToIntPtr ( GCHandle . Alloc ( typeTreeGenerator ) ) ;
19+ var handle = new TypeTreeGeneratorHandle ( ( generatorNameStr != null ) ? generatorNameStr : "AssetStudio" , unityVersion ) ;
20+ return GCHandle . ToIntPtr ( GCHandle . Alloc ( handle ) ) ;
2021 }
21- catch
22+ catch ( Exception ex )
2223 {
23- return IntPtr . Zero ;
24+ Console . WriteLine ( $ "Error creating TypeTreeGenerator: { ex . Message } ") ;
25+ // If the generator type is not recognized, we return IntPtr.Zero to indicate failure.
26+ // This should be handled by the caller to avoid further issues.
27+ Console . WriteLine ( "Failed to create TypeTreeGenerator instance. Ensure the generator name is correct and supported." ) ;
28+ return IntPtr . Zero ;
2429 }
2530 }
2631
@@ -33,14 +38,14 @@ unsafe public static int TypeTreeGenerator_loadDLL(IntPtr typeTreeGeneratorPtr,
3338 }
3439 try
3540 {
36- var typeTreeGenerator = ( TypeTreeGenerator_AssetStudio ) GCHandle . FromIntPtr ( typeTreeGeneratorPtr ) . Target ! ;
41+ var handle = ( TypeTreeGeneratorHandle ) GCHandle . FromIntPtr ( typeTreeGeneratorPtr ) . Target ! ;
3742 using ( var stream = new UnmanagedMemoryStream ( dllPtr , dllLength , dllLength , FileAccess . ReadWrite ) )
3843 {
3944 if ( stream == null )
4045 {
4146 return - 1 ;
4247 }
43- typeTreeGenerator . LoadDLL ( stream ) ;
48+ handle . Instance . LoadDll ( stream ) ;
4449 }
4550 return 0 ;
4651 }
@@ -61,7 +66,7 @@ unsafe public static int TypeTreeGenerator_loadIL2CPP(IntPtr typeTreeGeneratorPt
6166
6267 try
6368 {
64- var typeTreeGenerator = ( TypeTreeGenerator_AssetStudio ) GCHandle . FromIntPtr ( typeTreeGeneratorPtr ) . Target ! ;
69+ var handle = ( TypeTreeGeneratorHandle ) GCHandle . FromIntPtr ( typeTreeGeneratorPtr ) . Target ! ;
6570 byte [ ] assemblyData = new byte [ assemblyDataLength ] ;
6671 byte [ ] metadataData = new byte [ metadataDataLength ] ;
6772
@@ -74,7 +79,7 @@ unsafe public static int TypeTreeGenerator_loadIL2CPP(IntPtr typeTreeGeneratorPt
7479 Buffer . MemoryCopy ( metadataDataPtr , managedPtr , metadataDataLength , metadataDataLength ) ;
7580 }
7681
77- typeTreeGenerator . LoadIL2CPP ( assemblyData , metadataData ) ;
82+ handle . Instance . LoadIl2Cpp ( assemblyData , metadataData ) ;
7883 return 0 ;
7984 }
8085 catch
@@ -115,9 +120,9 @@ public static int TypeTreeGenerator_generateTypeTreeNodesJson(IntPtr typeTreeGen
115120 }
116121 try
117122 {
118- var typeTreeGenerator = ( TypeTreeGenerator_AssetStudio ) GCHandle . FromIntPtr ( typeTreeGeneratorPtr ) . Target ! ;
123+ var handle = ( TypeTreeGeneratorHandle ) GCHandle . FromIntPtr ( typeTreeGeneratorPtr ) . Target ! ;
119124
120- var typeTreeNodes = typeTreeGenerator . GenerateTreeNodes ( assemblyName , fullName ) ;
125+ var typeTreeNodes = handle . Instance . GenerateTreeNodes ( assemblyName , fullName ) ;
121126 if ( typeTreeNodes == null )
122127 {
123128 return - 1 ;
@@ -144,8 +149,8 @@ public static int TypeTreeGenerator_generateTypeTreeNodesRaw(IntPtr typeTreeGene
144149 }
145150 try
146151 {
147- var typeTreeGenerator = ( TypeTreeGenerator_AssetStudio ) GCHandle . FromIntPtr ( typeTreeGeneratorPtr ) . Target ! ;
148- var typeTreeNodes = typeTreeGenerator . GenerateTreeNodes ( assemblyName , fullName ) ;
152+ var handle = ( TypeTreeGeneratorHandle ) GCHandle . FromIntPtr ( typeTreeGeneratorPtr ) . Target ! ;
153+ var typeTreeNodes = handle . Instance . GenerateTreeNodes ( assemblyName , fullName ) ;
149154 if ( typeTreeNodes == null )
150155 {
151156 return - 1 ;
@@ -187,9 +192,9 @@ public static int TypeTreeGenerator_getMonoBehaviorDefinitions(IntPtr typeTreeGe
187192 }
188193 try
189194 {
190- var typeTreeGenerator = ( TypeTreeGenerator_AssetStudio ) GCHandle . FromIntPtr ( typeTreeGeneratorPtr ) . Target ! ;
195+ var handle = ( TypeTreeGeneratorHandle ) GCHandle . FromIntPtr ( typeTreeGeneratorPtr ) . Target ! ;
191196
192- var typeNames = typeTreeGenerator . GetMonoBehaviourDefinitions ( ) ;
197+ var typeNames = handle . Instance . GetMonoBehaviourDefinitions ( ) ;
193198
194199 var arrayLength = typeNames . Count ;
195200 var arrayPtr = Marshal . AllocCoTaskMem ( Marshal . SizeOf < IntPtr > ( ) * arrayLength * 2 ) ;
0 commit comments