Exemple #1
0
        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);
            }
        }
Exemple #3
0
        public static void End()
        {
            TypeResolver.WrapperSide = false;
            GenerateBindings.Gen();
            FuncDefineWriter.EndAll();
            FuncSerWriter.EndAll();
            FuncDeSerWriter.EndAll();

            foreach (var m in moduleSet)
            {
                m.Dispose();
            }

            moduleSet.Clear();
        }