Defined as follows:
typedef enum tagINVOKEKIND {
    INVOKE_FUNC = DISPATCH_METHOD,
    INVOKE_PROPERTYGET = DISPATCH_PROPERTYGET,
    INVOKE_PROPERTYPUT = DISPATCH_PROPERTYPUT,
    INVOKE_PROPERTYPUTREF = DISPATCH_PROPERTYPUTREF
} INVOKEKIND;
 
| Value | Description | 
|---|---|
| INVOKE_FUNC | The member is called using a normal function invocation syntax. | 
| INVOKE_PROPERTYGET | The function is invoked using a normal property-access syntax. | 
| INVOKE_PROPERTYPUT | The function is invoked using a property value assignment syntax. Syntactically, a typical programming language might represent changing a property in the same way as assignment. For example:object.property : = value. | 
| INVOKE_PROPERTYPUTREF | The function is invoked using a property reference assignment syntax. | 
In C, value assignment is written as *pobj1 = *pobj2, while reference assignment is written as pobj1 = pobj2. Other languages have other syntactic conventions. A property or data member can support only a value assignment, a reference assignment, or both. For a detailed description of property functions, see Chapter 5, "Dispatch Interface and API Functions." The INVOKEKIND enumeration constants are the same constants that are passed to IDispatch::Invoke to specify the way in which a function is invoked.