IEnumConnections
This
interface enumerates the current connections for a connectable object.
Connectable objects support the following features:
Outgoing interfaces, such as
event sets
The ability to enumerate the
IIDs of the outgoing interfaces
The ability to connect and
disconnect sinks to the object for those outgoing IIDs
The ability to enumerate the
connections that exist to a particular outgoing interface
When to Implement
To support
connectable objects, you need to provide four related interfaces:
IConnectionPointContainer
IEnumConnectionPoints
IConnectionPoint
IEnumConnections
The IConnectionPointContainer
interface indicates the existence of the outgoing interfaces. It provides
access to an enumerator sub-object with the IEnumConnectionPoints
interface. It also provides a connection point sub-object with the IConnectionPoint
interface. The IConnectionPoint interface provides access to an
enumerator sub-object with the IEnumConnections interface.
The
connection point is a separate sub-object to avoid circular reference counting
problems.
Any
individual connection point can support enumeration of its currently known
connections through IConnectionPoint::EnumConnections. The enumerator
created by this method implements the interface IEnumConnections which
deals with the type CONNECTDATA. Each CONNECTDATA structure
contains the IUnknown of a connected sink and the dwConnection
that was returned by IConnectionPoint::Advise when that sink was
connected. When enumerating connections through IEnumConnections, the
enumerator is responsible for calling IUnknown::AddRef through the
pointer in each enumerated structure, and the caller is responsible to later
call IUnknown::Release when those pointers are no longer needed.
When to Use
Use the IEnumConnectionPoints
interface to enumerate all the supported connection points for each outgoing
IID.
The
prototypes of the methods are as follows:
HRESULT Next(
ULONG cConnections , |
//[in]Number of CONNECTDATA structures
returned in rgpcd |
CONNECTDATA **rgpcd , |
//[out]Array to receive enumerated CONNECTDATA
structures |
ULONG *pcFetched |
//[out]Pointer to actual number of CONNECTDATA
structures |
); |
|
HRESULT Skip(
ULONG cConnections |
//[in]Number of elements to skip |
); |
|
HRESULT Reset(void);
HRESULT Clone(
IEnumConnections **ppEnum |
//[out]Indirect pointer to newly created enumerator |
); |
|
Remarks
IEnumConnections::Next
Enumerates
the next cConnections elements (i.e., CONNECTDATA structures) in
the enumerator s list, returning them in rgpcd along with the actual
number of enumerated elements in pcFetched.
The caller is
responsible for calling CONNECTDATA.pUnk->Release for each element in the array once this method
returns successfully. If cConnections is greater than one, the caller
must also pass a non-NULL pointer to pcFetched to get the number of
pointers it has to release.
E_NOTIMPL is
not allowed as a return value. If an error value is returned, no entries in the
rgpcd array are valid on exit and require no release.
IEnumConnections::Skip
Instructs the
enumerator to skip the next cConnections elements in the enumeration so
that the next call to IEnumConnections::Next will not return those
elements.
IEnumConnections::Reset
Instructs the
enumerator to position itself at the beginning of the list of elements.
There is no
guarantee that the same set of elements will be enumerated on each pass through
the list. It depends on the collection being enumerated. It is too expensive
for some collections, such as files in a directory, to maintain a specific
state.
IEnumConnections::Clone
Creates
another connection point enumerator with the same state as the current
enumerator to iterate over the same list. This method makes it possible to
record a point in the enumeration sequence in order to return to that point at
a later time.
The caller
must release this new enumerator separately from the first enumerator.
See Also