Ejemplo n.º 1
0
            private int DeleteMemberByName(string name, DispatchNameFlags nameFlags)
            {
                var nameComparison = nameFlags.HasFlag(DispatchNameFlags.CaseInsensitive) ? StringComparison.OrdinalIgnoreCase : StringComparison.Ordinal;

                var member = ReflectMembers.Concat(expandoMembers).FirstOrDefault(testMember => string.Equals(testMember.Name, name, nameComparison));

                if (!member.IsDefault && RemoveMember(member.Name))
                {
                    return(HResult.S_OK);
                }

                // IDispatchEx specifies S_FALSE, but DISP_E_UNKNOWNNAME provides parity with .NET Framework CCWs
                return(HResult.DISP_E_UNKNOWNNAME);
            }
Ejemplo n.º 2
0
            private int GetDispID(string name, DispatchNameFlags nameFlags, out int dispid)
            {
                var nameComparison = nameFlags.HasFlag(DispatchNameFlags.CaseInsensitive) ? StringComparison.OrdinalIgnoreCase : StringComparison.Ordinal;

                var member = ReflectMembers.Concat(expandoMembers).FirstOrDefault(testMember => string.Equals(testMember.Name, name, nameComparison));

                if (!member.IsDefault)
                {
                    dispid = member.DispID;
                    return(HResult.S_OK);
                }

                if (nameFlags.HasFlag(DispatchNameFlags.Ensure))
                {
                    ThisExpando.AddProperty(name);
                    return(GetDispID(name, nameFlags & ~DispatchNameFlags.Ensure, out dispid));
                }

                dispid = SpecialDispIDs.Unknown;
                return(HResult.DISP_E_UNKNOWNNAME);
            }