public static string GetDelegateWrapTypeName(TypeReference type, TypeReference delegateTarget) { var paramTpes = Utils.GetDelegateParams(type, delegateTarget, out var returnType); var paramDeclear = "("; for (int i = 0; i < paramTpes.Count; i++) { var p = paramTpes[i]; paramDeclear += $"{TypeResolver.Resolve(p).TypeName()} arg{i} "; if (i != paramTpes.Count - 1) { paramDeclear += ","; } } paramDeclear += ")"; var returnName = returnType == null ? "void" : TypeResolver.Resolve(returnType).TypeName(); var sign = paramDeclear + returnName; var delegateName = ""; if (!delegateSignDic.TryGetValue(sign, out delegateName)) { delegateName = "Delegate" + sign.GetHashCode().ToString("x"); delegateSignDic[sign] = delegateName; } var define = $"public delegate {returnName} {delegateName} {paramDeclear}"; GenerateBindings.AddDelegateDefine(define); return(delegateName); }
public MethodGenerater(MethodDefinition method) { genMethod = method; if (!genMethod.IsPublic && !genMethod.DeclaringType.IsInterface) { return; } if (genMethod.IsConstructor && genMethod.DeclaringType.IsAbstract) { return; } foreach (var p in genMethod.Parameters) { var type = p.ParameterType; Binder.AddType(type.Resolve()); } Binder.AddType(genMethod.ReturnType.Resolve()); if (!method.IsAbstract) { GenerateBindings.AddMethod(genMethod); } }
public static void End() { TypeResolver.WrapperSide = false; GenerateBindings.Gen(); FuncDefineWriter.EndAll(); FuncSerWriter.EndAll(); FuncDeSerWriter.EndAll(); foreach (var m in moduleSet) { m.Dispose(); } moduleSet.Clear(); }