IMoniker::Reduce
Returns a
reduced moniker; that is, another moniker that refers to the same object as
this moniker but can be bound with equal or greater efficiency.
HRESULT Reduce(
IBindCtx *pbc, |
//Pointer to bind context to be used |
DWORD dwReduceHowFar, |
//How much reduction should be done |
IMoniker
**ppmkToLeft, |
//Indirect pointer to moniker to the left in the
composite |
IMoniker
**ppmkReduced |
//Indirect pointer to the reduced moniker |
); |
|
Parameters
pbc
[in] Pointer
to the IBindCtx interface on the bind context to be used in this binding
operation. The bind context caches objects bound during the binding process,
contains parameters that apply to all operations using the bind context, and
provides the means by which the moniker implementation should retrieve
information about its environment. For more information, see IBindCtx
dwReduceHowFar
[in] DWORD
that specifies how far this moniker should be reduced. This parameter must be
one of the values from the MKRREDUCE
ppmkToLeft
[in, out] On
entry, indirect pointer to the moniker to the left of this moniker, if this
moniker is part of a composite. This parameter is primarily used by moniker
Implementers to enable cooperation between the various components of a
composite moniker; moniker clients can usually pass NULL.
On return, ppmkToLeft
is usually set to NULL, indicating no change in the original moniker to the
left. In rare situations ppmkToLeft indicates a moniker, indicating that
the previous moniker to the left should be disregarded and the moniker returned
through ppmkToLeft is the replacement. In such a situation, the
implementation must call IUnknown::Release
ppmkReduced
[out]
Indirect pointer to the IMoniker interface on the reduced form of this
moniker, which can be NULL if an error occurs or if this moniker is reduced to
nothing. If this moniker cannot be reduced, ppmkReduced is simply set to
this moniker and the return value is MK_S_REDUCED_TO_SELF. If ppmkReduced
is non-NULL, the implementation must call IUnknown::AddRef on the
parameter; it is the caller s responsibility to call IUnknown::Release.
(This is true even if ppmkReduced is set to this moniker.)
Return Values
The method
supports the standard return values E_UNEXPECTED and E_OUTOFMEMORY, as well as
the following:
S_OK
This moniker
was reduced.
MK_S_REDUCED_TO_SELF
This moniker
could not be reduced any further, so ppmkReduced indicates this moniker.
MK_E_EXCEEDEDDEADLINE
The operation
could not be completed within the time limit specified by the bind context s BIND_OPTS
Remarks
IMoniker::Reduce is intended for the following uses:
It enables the construction of
user-defined macros or aliases as new kinds of moniker classes. When reduced,
the moniker to which the macro evaluates is returned.
It enables the construction of
a kind of moniker that tracks data as it moves about. When reduced, the moniker
of the data in its current location is returned.
On file systems that support an
identifier-based method of accessing files which is independent of file names;
a file moniker could be reduced to a moniker which contains one of these
identifiers.
The intent of
the MKRREDUCE
Notes to Callers
The scenarios
described above are not currently implemented by the system-supplied moniker
classes.
You should
call IMoniker::Reduce before comparing two monikers using the IMoniker::IsEqual
Notes to Implementers
If the
current moniker can be reduced, your implementation must not reduce the moniker
in-place. Instead, it must return a new moniker that represents the reduced
state of the current one. This way, the caller still has the option of using
the non-reduced moniker (for example, enumerating its components). Your
implementation should reduce the moniker at least as far as is
requested.
See Also