internal void ProceedClass(string componentKey, XmlNode classesNode, CoClassInfo itemClass)
        {
            string  className = itemClass.Name;
            XmlNode classNode = LookForClassNode(classesNode, className);

            if (classNode == null)
            {
                classNode = CreateClassNode(itemClass, classesNode, className);
            }

            AddComponentKeyToClassNode(classNode, componentKey);
            AddClassInfo(componentKey, classNode, itemClass);
        }
        private void AddClassInfo(string componentKey, XmlNode classNode, CoClassInfo classInfo)
        {
            InterfaceInfo defaultInterface      = classInfo.DefaultInterface;
            InterfaceInfo defaultEventInterface = classInfo.DefaultEventInterface;

            foreach (TLI.MemberInfo itemMember in defaultInterface.Members)
            {
                if (true == IsClassMethod(itemMember))
                {
                    AddMethod(classNode, itemMember, componentKey);
                }
                else if (true == IsClassProperty(itemMember))
                {
                    AddProperty(classNode, itemMember, componentKey);
                }
                Marshal.ReleaseComObject(itemMember);
            }

            Marshal.ReleaseComObject(defaultInterface);
        }
Ejemplo n.º 3
0
        //ActiveXObject.on(obj: 'Word.Application', 'BeforeDocumentSave', ['Doc','SaveAsUI','Cancel'], function (params) {});
        private TSMemberDescription ToActiveXEventMember(MemberInfo m, CoClassInfo c)
        {
            var @namespace = c.Parent.Name;
            var eventName  = m.Name;

            var args = m.Parameters.Cast().Select(x => KVP(x.Name, (type: GetTypeName(x.VarTypeInfo, true), @readonly: !x.IsByRef()))).ToList();

            ITSType argnamesType;
            ITSType parameterType;

            if (args.None())
            {
                argnamesType  = null;
                parameterType = TSObjectType.PlainObject;
            }
            else if (args.Count <= 5)
            {
                argnamesType  = new TSTupleType(args.Keys().Select(x => $"'{x}'"));
                parameterType = new TSObjectType(args);
            }
            else
            {
                var alias = new TSAliasDescription()
                {
                    TargetType = new TSTupleType(args.Keys().Select(x => $"'{x}'"))
                };
                var param = new TSInterfaceDescription();
                args.SelectKVP((key, value) => KVP(key, new TSMemberDescription()
                {
                    ReturnType = value.type, ReadOnly = value.@readonly
                })).AddRangeTo(param.Members);
                var helperTypeKey = $"{@namespace}.EventHelperTypes.{c.Name}_{eventName}";
                if (!eventHelperTypes.TryGetValue(helperTypeKey, out var helperTypes))
                {
                    helperTypes = (alias, param);
                    eventHelperTypes.Add(helperTypeKey, helperTypes);
                }
                else if (!helperTypes.argNamesType.Equals(alias) || !helperTypes.parameterType.Equals(param))
                {
                    Debugger.Break();
                }

                argnamesType  = (TSSimpleType)$"{@namespace}.EventHelperTypes.{c.Name}_{eventName}_ArgNames";
                parameterType = (TSSimpleType)$"{@namespace}.EventHelperTypes.{c.Name}_{eventName}_Parameter";
            }

            var eventsourceType = $"{@namespace}.{c.Name}";

            var ret = new TSMemberDescription();

            ret.AddParameter("obj", $"{eventsourceType}");
            ret.AddParameter("event", $"'{eventName}'");
            if (argnamesType != null)
            {
                ret.AddParameter("argNames", argnamesType);
            }

            //build the handler parameter type
            var memberDescr = new TSMemberDescription();
            var fnType      = new TSFunctionType(memberDescr);

            memberDescr.AddParameter("this", eventsourceType);
            memberDescr.AddParameter("parameter", parameterType);
            memberDescr.ReturnType = TSSimpleType.Void;
            ret.AddParameter("handler", fnType);

            ret.ReturnType = TSSimpleType.Void;

            return(ret);
        }
Ejemplo n.º 4
0
        private KeyValuePair <string, TSInterfaceDescription> ToTSInterfaceDescription(CoClassInfo c)
        {
            var typename = $"{c.Parent.Name}.{c.Name}";

            //scripting environments can only use the default interface, because they don't have variable types
            //we can thus ignore everything else in c.Interfaces
            return(ToTSInterfaceDescriptionBase(c.DefaultInterface.Members, typename, c.HelpString));
        }
Ejemplo n.º 5
0
 public static object Debug(this CoClassInfo c)
 {
     Array  strings;
     var    i = c.AttributeStrings[out strings];
Ejemplo n.º 6
0
 public static bool IsCreateable(this CoClassInfo cc) => (cc.AttributeMask & 2) == 2;