| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 | 
							- using dnlib.DotNet;
 
- using HybridCLR.Editor.Meta;
 
- using System;
 
- using System.Collections.Generic;
 
- using System.Linq;
 
- using System.Runtime.CompilerServices;
 
- using System.Text;
 
- using System.Threading.Tasks;
 
- using UnityEngine;
 
- namespace HybridCLR.Editor.MethodBridge
 
- {
 
-     public class PInvokeAnalyzer
 
-     {
 
-         private readonly List<ModuleDefMD> _rootModules = new List<ModuleDefMD>();
 
-         private readonly List<CallNativeMethodSignatureInfo> _pinvokeMethodSignatures = new List<CallNativeMethodSignatureInfo>();
 
-         public List<CallNativeMethodSignatureInfo> PInvokeMethodSignatures => _pinvokeMethodSignatures;
 
-         public PInvokeAnalyzer(AssemblyCache cache, List<string> assemblyNames)
 
-         {
 
-             foreach (var assemblyName in assemblyNames)
 
-             {
 
-                 _rootModules.Add(cache.LoadModule(assemblyName));
 
-             }
 
-         }
 
-         private CallingConvention GetCallingConvention(MethodDef method)
 
-         {
 
-             switch (method.ImplMap.CallConv)
 
-             {
 
-                 case PInvokeAttributes.CallConvWinapi: return CallingConvention.Default;
 
-                 case PInvokeAttributes.CallConvCdecl: return CallingConvention.C;
 
-                 case PInvokeAttributes.CallConvStdCall: return CallingConvention.StdCall;
 
-                 case PInvokeAttributes.CallConvThiscall: return CallingConvention.ThisCall;
 
-                 case PInvokeAttributes.CallConvFastcall: return CallingConvention.FastCall;
 
-                 default: return CallingConvention.Default;
 
-             }
 
-         }
 
-         public void Run()
 
-         {
 
-             foreach (var mod in _rootModules)
 
-             {
 
-                 foreach (TypeDef type in mod.GetTypes())
 
-                 {
 
-                     foreach (MethodDef method in type.Methods)
 
-                     {
 
-                         if (method.IsPinvokeImpl)
 
-                         {
 
-                             if (!MetaUtil.IsSupportedPInvokeMethodSignature(method.MethodSig))
 
-                             {
 
-                                 Debug.LogError($"PInvoke method {method.FullName} has unsupported parameter or return type. Please check the method signature.");
 
-                             }
 
-                             _pinvokeMethodSignatures.Add(new CallNativeMethodSignatureInfo
 
-                             {
 
-                                 MethodSig = method.MethodSig,
 
-                                 Callvention = method.HasImplMap? GetCallingConvention(method) : (CallingConvention?)null,
 
-                             });
 
-                         }
 
-                     }
 
-                 }
 
-             }
 
-         }
 
-     }
 
- }
 
 
  |