# IMoniker::Inverse

Provides a moniker that, when composed to the right of this moniker or one of similar structure, will destroy it (the moniker will compose to nothing).

HRESULT Inverse(

IMoniker **ppmk | //Indirect pointer to the inverse of the moniker
); |

Parameter

ppmk
  [out] When successful, indirect pointer to the IMoniker interface on a moniker that is the inverse of this moniker. In this case, the implementation must call IUnknown::AddRef on the parameter. It is the caller’s responsibility to call IUnknown::Release. If an error occurs, the implementation should set ppmk to NULL.

Return Values

The method supports the standard return value E_OUTOFMEMORY, as well as the following:

S_OK
  The inverse moniker has been returned successfully.
MK_E_NOINVERSE
  The moniker class does not have an inverse.

Remarks

The inverse of a moniker is analogous to the “..” directory in MS-DOS file systems; the “..” directory acts as the inverse to any other directory name, because appending “..” to a directory name results in an empty path. In the same way, the inverse of a moniker typically is also the inverse of all monikers in the same class. However, it is not necessarily the inverse of a moniker of a different class.

The inverse of a composite moniker is a composite consisting of the inverses of the components of the original moniker, arranged in reverse order. For example, if the inverse of A is Inv( A ) and the composite of A, B, and C is Comp( A, B, C ), then

Inv( Comp( A, B, C ) )

is equal to

Comp( Inv( C ), Inv( B ), Inv( A ) ).

Not all monikers have inverses. Most monikers that are themselves inverses, such as anti-monikers, do not have inverses. Monikers that have no inverse cannot have relative monikers formed from inside the objects they identify to other objects outside.

#### Notes to Callers

An object that is using a moniker to locate another object usually does not know the class of the moniker it is using. To get the inverse of a moniker, you should always call IMoniker::Inverse rather than the CreateAntiMoniker function, because you cannot be certain that the moniker you’re using considers an anti-moniker to be its inverse.

The IMoniker::Inverse method is also called by the implementation of the IMoniker::RelativePathTo method, to assist in constructing a relative moniker.

#### Notes to Implementers

If your monikers have no internal structure, you can call the CreateAntiMoniker function in to get an anti-moniker in your implementation of IMoniker::Inverse. In your implementation of IMoniker::ComposeWith, you need to check for the inverse you supply in the implementation of IMoniker::Inverse.

See Also

CreateAntiMoniker, IMoniker::ComposeWith, IMoniker::RelativePathTo