Example #1
0
        public object GetProperty(string name, out bool isCacheable, params object[] args)
        {
            isCacheable = false;

            DispatchMember member = null;

            if (args.Length < 1)
            {
                // some objects crash on attempt to retrieve a method as a property

                member = GetMembers().FirstOrDefault(testMember => testMember.Name == name);
                if ((member != null) && member.DispatchFlags == DispatchFlags.Method)
                {
                    return(new HostMethod(hostItem, name));
                }
            }

            try
            {
                var result = dispatch.GetProperty(name, args);
                return(result);
            }
            catch (Exception)
            {
                if (args.Length < 1)
                {
                    if (member == null)
                    {
                        member = GetMembers().FirstOrDefault(testMember => testMember.Name == name);
                    }

                    if ((member != null) && !member.DispatchFlags.HasFlag(DispatchFlags.Method))
                    {
                        return(new HostIndexedProperty(hostItem, name));
                    }

                    return(new HostMethod(hostItem, name));
                }

                throw;
            }
        }
Example #2
0
        public static DispatchMember Merge(int dispid, IEnumerable <DispatchMember> group)
        {
            var members = group.ToArray();

            if (members.Length < 1)
            {
                return(null);
            }

            var result = new DispatchMember(members[0].Name, dispid);

            foreach (var member in members)
            {
                Debug.Assert(member.Name == result.Name);
                Debug.Assert(member.DispID == result.DispID);
                result.DispatchFlags |= member.DispatchFlags;
            }

            return(result);
        }