IMoniker::Inverse  P1JSCM

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::AddRef1SHW0SS on the parameter. It is the caller s responsibility to call IUnknown::ReleaseDUW01A. 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 CreateAntiMonikerK5IP0Q 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::RelativePathTo8ECMZ1 method, to assist in constructing a relative moniker.

Notes to Implementers

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

See Also

CreateAntiMoniker, IMoniker::ComposeWith, IMoniker::RelativePathTo