Support for connectable objects requires support for four interfaces:
The latter two are defined as standard enumerators for the types IConnectionPoint * and CONNECTDATA. See IEnumXxxx for more information on enumerators.
Additionally, the connectable object can optionally support IProvideClassInfo and IProvideClassInfo2 to provide enough information to a client so the client can provide support for the outgoing interface at run-time.
Finally, the client must provide a sink object that implements the outgoing interface which is a custom COM interface defined by the connectable object.
The IConnectionPointContainer, IConnectionPoint, IProvideClassInfo, and IProvideClassInfo2 interfaces are defined as follows:
interface IConnectionPointContainer : IUnknown { HRESULT EnumConnectionPoints([out] IEnumConnectionPoints **ppEnum); HRESULT FindConnectionPoint([in] REFIID riid , [out] IConnectionPoint **ppCP); } interface IConnectionPoint : IUnknown { HRESULT GetConnectionInterface([out] IID *pIID); HRESULT GetConnectionPointContainer([out] IConnectionPointContainer **ppCPC); HRESULT Advise([in] IUnknown *pUnk, [out] DWORD *pdwCookie); HRESULT Unadvise([in] DWORD dwCookie); HRESULT EnumConnections([out] IEnumConnections **ppEnum); } interface IProvideClassInfo : IUnknown { HRESULT GetClassInfo([out] ITypeInfo **ppTI); } interface IProvideClassInfo2 : IProvideClassInfo { HRESULT GetGUID( ); }