IMoniker::CommonPrefixWith
Creates a new
moniker based on the common prefix that this moniker (the one comprising the
data of this moniker object) shares with another moniker.
HRESULT CommonPrefixWith(
IMoniker *pmkOther, |
//Pointer to moniker to be used for comparison |
IMoniker
**ppmkPrefix |
//Indirect pointer to the prefix |
); |
|
Parameters
pmkOther
[in] Pointer
to the IMoniker interface on another moniker to be compared with this
one to determine whether there is a common prefix.
ppmkPrefix
[out] When
successful, points to the IMoniker pointer to the moniker that is the
common prefix of this moniker and pmkOther. In this case, the
implementation must call IUnknown::AddRef
Return Values
The method
supports the standard return value E_OUTOFMEMORY, as well as the following:
S_OK
A common
prefix exists that is neither this moniker nor pmkOther.
MK_S_NOPREFIX
No common
prefix exists.
MK_S_HIM
The entire pmkOther
moniker is a prefix of this moniker.
MK_S_US
The two
monikers are identical.
MK_S_ME
This moniker
is a prefix of the pmkOther moniker.
MK_E_NOTBINDABLE
This method
was called on a relative moniker. It is not meaningful to take the common
prefix on a relative moniker.
Remarks
IMoniker::CommonPrefixWith creates a new moniker that consists of the common
prefixes of the moniker on this moniker object and another moniker. If, for
example, one moniker represents the path c:\projects\secret\art\pict1.bmp and
another moniker represents the path c:\projects\secret\docs\chap1.txt, the
common prefix of these two monikers would be a moniker representing the path
c:\projects\secret.
Notes to Callers
The IMoniker::CommonPrefixWith
method is primarily called in the implementation of the IMoniker::RelativePathTo
Call this
method only if pmkOther and this moniker are both absolute monikers. An
absolute moniker is either a file moniker or a generic composite whose leftmost
component is a file moniker that represents an absolute path. Do not call this
method on relative monikers, because it would not produce meaningful results.
Notes to Implementers
Your
implementation should first determine whether pmkOther is a moniker of a
class that you recognize and for which you can provide special handling (for
example, if it is of the same class as this moniker). If so, your
implementation should determine the common prefix of the two monikers.
Otherwise, it should pass both monikers in a call to the MonikerCommonPrefixWith
See Also