IMoniker ::CommonPrefixWith, méthode (objidl.h)

Crée un nouveau moniker basé sur le préfixe que ce moniker a en commun avec le moniker spécifié.

Syntaxe

HRESULT CommonPrefixWith(
  [in]  IMoniker *pmkOther,
  [out] IMoniker **ppmkPrefix
);

Paramètres

[in] pmkOther

Pointeur vers l’interface IMoniker sur un autre moniker à comparer à celui-ci pour déterminer s’il existe un préfixe commun.

[out] ppmkPrefix

Adresse d’une variable pointeur IMoniker* qui reçoit le pointeur d’interface vers le moniker qui est le préfixe commun de ce moniker et pmkOther. En cas de réussite, l’implémentation doit appeler AddRef sur le moniker résultant ; il incombe à l’appelant d’appeler Release. Si une erreur se produit ou s’il n’existe aucun préfixe commun, l’implémentation doit définir *ppmkPrefix sur NULL.

Valeur retournée

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

Code de retour Description
S_OK
Il existe un préfixe commun qui n’est ni ce moniker ni pmkOther.
MK_S_NOPREFIX
Il n’existe aucun préfixe commun.
MK_S_HIM
L’intégralité de pmkOther est un préfixe de ce moniker.
MK_S_US
Les deux monikers sont identiques.
MK_S_ME
Ce moniker est un préfixe du moniker pmkOther .
MK_S_NOTBINDABLE
Cette méthode a été appelée sur un moniker relatif. Il n’est pas significatif de prendre le préfixe commun sur un moniker relatif.

Remarques

CommonPrefixWith crée un nouveau moniker qui se compose des préfixes communs du moniker sur cet objet moniker et d’un autre moniker. Par exemple, si un moniker représente le chemin « c:\projects\secret\art\pict1.bmp » et un autre moniker représente le chemin « c:\projects\secret\docs\chap1.txt », le préfixe commun de ces deux monikers est un moniker représentant le chemin « c :\projects\secret ».

Remarques aux appelants

La méthode CommonPrefixWith est principalement appelée dans l’implémentation de la méthode IMoniker ::RelativePathTo . Les clients qui utilisent un moniker pour localiser un objet ont rarement besoin d’appeler cette méthode.

Appelez cette méthode uniquement si pmkOther et ce moniker sont tous deux des monikers absolus. Un moniker absolu est un moniker de fichier ou un composite générique dont le composant le plus à gauche est un moniker de fichier qui représente un chemin absolu. N’appelez pas cette méthode sur des monikers relatifs, car elle ne produirait pas de résultats significatifs.

Remarques aux implémenteurs

Votre implémentation 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, s’il s’agit de la même classe que ce moniker). Dans ce cas, votre implémentation doit déterminer le préfixe commun des deux monikers. Sinon, il doit passer les deux monikers dans un appel à la fonction MonikerCommonPrefixWith , qui gère correctement la casse générique.

Notes spécifiques à l’implémentation

Implémentation Notes
Anti-moniker Si l’autre moniker est également un anti-moniker, la méthode retourne MK_S_US et définit ppmkPrefix sur ce moniker. Sinon, la méthode appelle la fonction MonikerCommonPrefixWith . Cette fonction gère correctement le cas où l’autre moniker est un composite générique.
Moniker de classe Si pmkOther est égal à ce moniker, récupère un pointeur vers ce moniker et retourne MK_S_US. Si pmkOther est un moniker de classe mais n’est pas égal à ce moniker, retourne MK_E_NOPREFIX. Sinon, retourne le résultat de l’appel de MonikerCommonPrefixWith avec lui-même en tant que pmkThis, pmkOther et ppmkPrefix, qui gère le cas où pmkOther est un moniker composite générique.
Moniker de fichier Si les deux monikers sont des monikers de fichier, cette méthode retourne un moniker de fichier basé sur les composants communs au début de deux monikers de fichier. Les composants d’un moniker de fichier peuvent être des types suivants :
  • Nom d’ordinateur de la forme \\server\share. Un nom d’ordinateur étant traité comme un seul composant, deux monikers représentant les chemins d’accès « \\myserver\public\work » et « \\myserver\private\games » n’ont pas « \\myserver » comme préfixe commun.
  • Une désignation de lecteur (par exemple, « C : »).
  • Répertoire ou nom de fichier.
Si l’autre moniker n’est pas un moniker de fichier, cette méthode transmet les deux monikers dans un appel à la fonction MonikerCommonPrefixWith . Cette fonction gère correctement le cas où l’autre moniker est un composite générique.

Cette méthode retourne MK_E_NOPREFIX s’il n’existe aucun préfixe commun.

Moniker composite générique Si l’autre moniker est un composite, cette méthode compare les composants de chaque composite de gauche à droite. Le moniker de préfixe commun retourné peut également être un moniker composite, selon le nombre de composants les plus à gauche qui étaient communs aux deux monikers. Si l’autre moniker n’est pas un composite, la méthode le compare simplement au composant le plus à gauche de ce moniker.

Si les monikers sont égaux, la méthode retourne MK_S_US et définit ppmkPrefix sur ce moniker. Si l’autre moniker est un préfixe de ce moniker, la méthode retourne MK_S_HIM et définit ppmkPrefix sur l’autre moniker. Si ce moniker est un préfixe de l’autre, cette méthode retourne MK_S_ME et définit ppmkPrefix sur ce moniker.

S’il n’existe aucun préfixe commun, cette méthode retourne MK_E_NOPREFIX et définit ppmkPrefix sur NULL.

Moniker d’élément Si l’autre moniker est un moniker d’élément égal à ce moniker, cette méthode définit *ppmkPrefix sur ce moniker et retourne MK_S_US ; sinon, la méthode appelle la fonction MonikerCommonPrefixWith . Cette fonction gère correctement le cas où l’autre moniker est un composite générique.
MONIKER OBJREF Si les deux monikers sont égaux, cette méthode retourne MK_S_US et définit *ppmkPrefix sur NULL. Si l’autre moniker n’est pas un moniker OBJREF, cette méthode transmet les deux monikers à la fonction MonikerCommonPrefixWith . Cette fonction gère correctement le cas où l’autre moniker est un composite générique.

S’il n’existe aucun préfixe commun, cette méthode retourne MK_E_NOPREFIX.

Moniker de pointeur Si les deux monikers sont égaux, cette méthode retourne MK_S_US et définit *ppmkPrefix sur ce moniker. Sinon, la méthode retourne MK_E_NOPREFIX et définit *ppmkPrefix sur NULL.
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

MonikerCommonPrefixWith