3.8.4 Message Processing Events and Sequencing Rules
To retrieve a reference to an ITypeInfo server, a client MUST do one of the following:
If the client holds a reference to an automation server IDispatch implementation, it can call IDispatch::GetTypeInfo (see section 3.1.4.2)
If the client holds a reference to an ITypeComp server, it can call ITypeComp::Bind (see section 3.5.4.1) or ITypeComp::BindType (see section 3.5.4.2)
If the client holds a reference to another ITypeInfo server, it can call ITypeInfo::GetRefTypeInfo (see section 3.7.4.10)
If the client holds a reference to an ITypeLib server, it can call ITypeLib::GetTypeInfo (see section 3.11.4.2), ITypeLib::GetTypeInfoOfGuid (see section 3.11.4.4), or ITypeLib::FindName (see section 3.11.4.9)
A client MUST call ITypeInfo::GetTypeAttr (section 3.7.4.1) to retrieve the essential characteristics of the type. To iterate over the data and method members of the type, the client MUST use the data retrieved in TYPEATTR and then call ITypeInfo::GetVarDesc (section 3.7.4.4) and ITypeInfo::GetFuncDesc (section 3.7.4.3).
To discover inheritance relationships for interfaces or the set of nonsource and source interfaces supported by a coclass, a client MUST enumerate the referenced types of an ITypeInfo server using ITypeInfo::GetRefTypeOfImplType (section 3.7.4.6) and ITypeInfo::GetRefTypeInfo (section 3.7.4.10).
To retrieve string information related to the ITypeInfo server, the client MUST call ITypeInfo::GetDocumentation (section 3.7.4.8) or ITypeInfo::GetNames (section 3.7.4.5).