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 |
---|---|
|
Il existe un préfixe commun qui n’est ni ce moniker ni pmkOther. |
|
Il n’existe aucun préfixe commun. |
|
L’intégralité de pmkOther est un préfixe de ce moniker. |
|
Les deux monikers sont identiques. |
|
Ce moniker est un préfixe du moniker pmkOther . |
|
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 :
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 |