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); }
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); }