Méthode IMoniker ::RelativePathTo (objidl.h)

Crée un moniker relatif entre ce moniker et le moniker spécifié.

Syntaxe

HRESULT RelativePathTo(
  [in]  IMoniker *pmkOther,
  [out] IMoniker **ppmkRelPath
);

Paramètres

[in] pmkOther

Pointeur vers l’interface IMoniker sur le moniker vers lequel un chemin relatif doit être emprunté.

[out] ppmkRelPath

Pointeur vers une variable de pointeur IMoniker qui reçoit le pointeur d’interface vers le moniker relatif. En cas de réussite, l’implémentation doit appeler AddRef sur le nouveau moniker ; il incombe à l’appelant d’appeler Release. Si une erreur se produit, l’implémentation définit *ppmkRelPath surNULL.

Valeur retournée

Cette méthode peut retourner les valeurs de retour standard E_OUTOFMEMORY et E_UNEXPECTED, ainsi que les valeurs suivantes.

Code de retour Description
S_OK
La commande s'est correctement terminée.
MK_S_HIM
Aucun préfixe commun n’est partagé par les deux monikers et le moniker retourné dans ppmkRelPath est pmkOther.
MK_E_NOTBINDABLE
Ce moniker est un moniker relatif, tel qu’un moniker d’élément. Ce moniker doit être composé avec le moniker de son conteneur avant qu’un chemin relatif puisse être déterminé.

Remarques

Un moniker relatif est analogue à un chemin d’accès relatif (tel que . \backup »). Par exemple, supposons que vous ayez un moniker qui représente le chemin « c:\projects\secret\art\pict1.bmp » et un autre moniker qui représente le chemin « c:\projects\secret\docs\chap1.txt ». L’appel de RelativePathTo sur le premier moniker, en passant le second comme paramètre pmkOther , créerait un moniker relatif représentant le chemin d’accès . \docs\chap1.txt ».

Notes aux appelants

Les clients Moniker n’ont généralement pas besoin d’appeler RelativePathTo. Cette méthode est appelée principalement par le gestionnaire par défaut pour les objets liés. Les objets liés contiennent à la fois un moniker absolu et un moniker relatif pour identifier la source de lien. (Cela permet le suivi des liens si l’utilisateur déplace une arborescence de répertoires contenant à la fois le conteneur et les fichiers sources.) Le gestionnaire par défaut appelle cette méthode pour créer un moniker relatif à partir du document conteneur vers la source de lien. (Autrement dit, il appelle RelativePathTo sur le moniker identifiant le document conteneur, en passant le moniker identifiant la source de lien comme paramètre pmkOther .)

Si vous appelez RelativePathTo, appelez-le uniquement sur des monikers absolus, par exemple, un moniker de fichier ou un moniker composite dont le composant le plus à gauche est un moniker de fichier, où le moniker de fichier représente un chemin absolu. N’appelez pas cette méthode sur les monikers relatifs.

Notes aux implémenteurs

Votre implémentation de RelativePathTo doit d’abord déterminer si pmkOther est un moniker d’une classe que vous reconnaissez et pour laquelle vous pouvez fournir une gestion spéciale (par exemple, si elle est de la même classe que ce moniker). Si c’est le cas, votre implémentation doit déterminer le chemin relatif. Sinon, il doit passer les deux monikers dans un appel à la fonction MonikerRelativePathTo , qui gère correctement le cas générique.

La première étape de la détermination d’un chemin relatif consiste à déterminer le préfixe commun de ce moniker et pmkOther. L’étape suivante consiste à diviser ce moniker et pmkOther en deux parties chacune, par exemple (P, myTail) et (P, otherTail), respectivement, où P est le préfixe commun. Le chemin relatif correct est alors l’inverse de myTail composé avec otherTail :

Comp( Inv( myTail ), otherTail )

où Comp() représente l’opération de composition et Inv() représente l’opération inverse.

Pour certains types de monikers, vous ne pouvez pas utiliser votre méthode IMoniker ::Inverse pour construire l’inverse de myTail. Par exemple, un moniker de fichier retourne un anti-moniker en tant qu’inverse, tandis que sa méthode RelativePathTo doit utiliser un ou plusieurs monikers de fichier qui représentent chacun le chemin d’accès ». » pour construire l’inverse de myTail.

Notes spécifiques à l’implémentation

Implémentation Notes
Anti-moniker Cette méthode retourne MK_S_HIM et définit *ppmkRelPath sur l’autre moniker.
Moniker de classe Cette méthode retourne le résultat de l’appel de MonikerRelativePathTo avec pmkSrc égal à ce moniker, pmkOther, ppmkRelPath et TRUE comme dwReserved.
Moniker de fichier Cette méthode calcule un moniker qui, lorsqu’il est composé à droite de ce moniker, produit l’autre moniker. Par exemple, si le chemin de ce moniker est « C:\work\docs\report.doc » et si l’autre moniker est « C:\work\art\picture.bmp », le chemin du moniker calculé est « ». \.. \art\picture.bmp ».
Moniker composite générique Cette méthode recherche le préfixe commun des deux monikers et crée deux monikers qui se composent du reste lorsque le préfixe commun est supprimé. Ensuite, il crée l’inverse pour le reste de ce moniker et compose le reste de l’autre moniker à droite de celui-ci.
Moniker d’élément Cette méthode retourne MK_E_NOTBINDABLE et définit *ppmkRelPath surNULL.
Moniker OBJREF Cette méthode retourne E_NOTIMPL.
Moniker de pointeur Cette méthode retourne E_NOTIMPL.
Moniker d’URL Cette méthode retourne E_NOTIMPL.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 2000 Professionnel [applications de bureau uniquement]
Serveur minimal pris en charge Windows 2000 Server [applications de bureau uniquement]
Plateforme cible Windows
En-tête objidl.h

Voir aussi

IMoniker

MonikerRelativePathTo