18.104.22.168.1 Interfaces Automation Members
An interface defined as "dual", or an interface referenced from the <oa-itf-ref> production, defines the automation members by extending the <op_declarator> production from [C706] with a new set of attributes:
operation-attribute = rpcidl-defined / kw-id LWSP "(" LWSP integer-const-exp LWSP ")" / kw-propget / kw-propput / kw-propputref / kw-vararg / kw-defaultcollelem / kw-nonbrowsable / kw-replaceable / kw-restricted / kw-uidefault / kw-hidden / oa-bindable-attr / readonly-attr / help-attr / custom-attr
If the id attribute exists, it MUST represent the DISPID that any client MUST pass in as the dispIdMember argument in calls to IDispatch::Invoke (see section 22.214.171.124) to execute the automation method identified by this value.
An operation that specifies any of the propget, propput, or propputref attributes MUST be a property accessor method. Two operations with the same property name MUST have the same DISPID; one of them MUST have the propget attribute; the other MUST have either the propput or propputref attribute.
If the attributes propget, propput, or propputref exist for a method, a client MUST set the values DISPATCH_PROPERTYGET, DISPATCH_PROPERTYPUT, or DISPATCH_PROPERTYPUTREF, respectively, into the wFlags argument in calls to IDispatch::Invoke (see section 126.96.36.199) to disambiguate between the put and get semantics. The disambiguation is needed because the DISPID identifies only the property to be accessed, not the operation to be executed.
kw-vararg: Specifies that the final parameter of the method MUST be a SAFEARRAY containing VARIANTs or a pointer to a SAFEARRAY containing VARIANTs. This parameter MUST NOT be used on an ODL dispinterface property or on a property accessor method. For further specifications on handling "vararg" arguments, see section 188.8.131.52.3.
kw-defaultcollelem: Specifies that a property is available for compiler-specific optimizations<40>. The [defaultcollelem] attribute refers to the property as a whole, and MUST be applied to both get and set accessor methods, if they exist. A type SHOULD NOT contain more than one property with this attribute<41>.
kw-nonbrowsable: Specifies that a property is not always safe to evaluate. The attribute MUST be specified only for property accessor methods or properties. Type browser clients SHOULD display the name of the property to users, but MUST NOT call the property's get accessor in order to display its contents.
kw-replaceable: This attribute SHOULD NOT be used<42>.
kw-restricted: Specifies that the element is not intended to be used under all conditions, as specified in section 184.108.40.206.
kw-uidefault: Specifies that the element is intended to be used to represent its containing type to users. Type browser clients MUST display an element with this attribute whenever only one member of a type can be displayed. A type MUST NOT contain more than one element with this attribute.