Partager via


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

Réduit un moniker à sa forme la plus simple.

Syntaxe

HRESULT Reduce(
  [in]      IBindCtx *pbc,
  [in]      DWORD    dwReduceHowFar,
  [in, out] IMoniker **ppmkToLeft,
  [out]     IMoniker **ppmkReduced
);

Paramètres

[in] pbc

Pointeur vers l’interface IBindCtx sur le contexte de liaison à utiliser dans cette opération de liaison. Le contexte de liaison met en cache les objets liés pendant le processus de liaison, contient des paramètres qui s’appliquent à toutes les opérations utilisant le contexte de liaison et fournit les moyens par lesquels l’implémentation du moniker doit récupérer des informations sur son environnement.

[in] dwReduceHowFar

Spécifie le niveau de réduction souhaité pour ce moniker. Ce paramètre doit être l’une des valeurs de l’énumération MKRREDUCE .

[in, out] ppmkToLeft

Lors de l’entrée, pointeur vers une variable pointeur IMoniker qui contient le pointeur d’interface vers moniker à gauche de ce moniker. Ce paramètre est principalement utilisé par les implémenteurs moniker pour permettre la coopération entre les différents composants d’un moniker composite ; Les clients moniker peuvent généralement passer null.

Au retour, *ppmkToLeft est généralement défini sur NULL, ce qui n’indique aucune modification du moniker d’origine à gauche. Dans de rares cas, *ppmkToLeft indique un moniker, indiquant que le moniker précédent à gauche doit être ignoré et que le moniker retourné via *ppmkToLeft est le remplacement. Dans une telle situation, l’implémentation doit appeler Release sur l’ancien moniker à gauche de ce moniker et doit appeler AddRef sur le nouveau moniker retourné ; l’appelant doit le libérer ultérieurement. Si une erreur se produit, l’implémentation peut laisser le pointeur d’interface inchangé ou le définir sur NULL.

[out] ppmkReduced

Pointeur vers une variable pointeur IMoniker qui reçoit le pointeur d’interface vers la forme réduite de ce moniker, qui peut être NULL si une erreur se produit ou si ce moniker est réduit à rien. Si ce moniker ne peut pas être réduit, *ppmkReduced est simplement défini sur ce moniker et la valeur de retour est MK_S_REDUCED_TO_SELF. Si *ppmkReduced n’a pas la valeur NULL, l’implémentation doit appeler AddRef sur le nouveau moniker ; il incombe à l’appelant d’appeler Release. (Cela est vrai même si *ppmkReduced est défini sur ce moniker.)

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_REDUCED_TO_SELF
Ce moniker n’a pas pu être réduit davantage, donc ppmkReduced indique ce moniker.
MK_E_EXCEEDEDDEADLINE
L’opération n’a pas pu être effectuée dans le délai spécifié par la structure BIND_OPTS du contexte de liaison.

Remarques

Cette méthode est destinée aux utilisations suivantes :

  • Activez la construction de macros ou d’alias définis par l’utilisateur en tant que nouveaux types de classes moniker. Lorsqu’il est réduit, le moniker auquel la macro est évaluée est retourné.
  • Activez la construction d’un type de moniker qui suit les données à mesure qu’elles se déplacent. Lorsqu’il est réduit, le moniker des données à leur emplacement actuel est retourné.
  • Sur les systèmes de fichiers qui prennent en charge une méthode basée sur un identificateur pour accéder aux fichiers indépendamment des noms de fichiers ; un moniker de fichier peut être réduit à un moniker qui contient l’un de ces identificateurs.
L’objectif des indicateurs MKRREDUCE transmis dans le paramètre dwReduceHowFar est de fournir la possibilité de réduire par programmation un moniker à un formulaire dont le nom d’affichage est reconnaissable à l’utilisateur. Par exemple, les chemins d’accès dans le système de fichiers, les signets dans les documents de traitement de texte et les noms de plages dans les feuilles de calcul sont tous reconnaissables aux utilisateurs. En revanche, une macro ou un alias encapsulé dans un moniker ne sont pas reconnaissables pour les utilisateurs.

Remarques aux appelants

Les scénarios décrits ci-dessus ne sont actuellement pas implémentés par les classes moniker fournies par le système.

Vous devez appeler Reduce avant de comparer deux monikers à l’aide de la méthode IMoniker ::IsEqual , car un moniker réduit se présente sous sa forme la plus spécifique. IsEqual peut retourner S_FALSE sur deux monikers avant qu’ils ne soient réduits et S_OK après avoir été réduits.

Remarques aux implémenteurs

Si le moniker actuel peut être réduit, votre implémentation ne doit pas réduire le moniker sur place. Au lieu de cela, il doit retourner un nouveau moniker qui représente l’état réduit de l’actuel. De cette façon, l’appelant a toujours la possibilité d’utiliser le moniker non induit (par exemple, énumérer ses composants). Votre implémentation doit réduire le moniker au moins autant que nécessaire.

Notes spécifiques à l’implémentation

Implémentation Notes
Anti-moniker Cette méthode retourne MK_S_REDUCED_TO_SELF et repasse le même moniker.
Moniker de classe Cette méthode retourne MK_S_REDUCED_TO_SELF et repasse le même moniker.
Moniker de fichier Cette méthode retourne MK_S_REDUCED_TO_SELF et repasse le même moniker.
Moniker composite générique Cette méthode appelle de manière récursive Reduce pour chacun de ses monikers de composant. Si l’un des composants se réduit, la méthode retourne S_OK et repasse un composite des composants réduits. Si aucune réduction n’a eu lieu, la méthode repasse le même moniker et retourne MK_S_REDUCED_TO_SELF.
Moniker d’élément Cette méthode retourne MK_S_REDUCED_TO_SELF et repasse le même moniker.
MONIKER OBJREF Cette méthode retourne MK_S_REDUCED_TO_SELF et repasse le même moniker.
Moniker de pointeur Cette méthode retourne MK_S_REDUCED_TO_SELF et repasse le même moniker.
Moniker d’URL Cette méthode retourne MK_S_REDUCED_TO_SELF et repasse le même moniker.

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