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

Reduce un moniker a su forma más sencilla.

Sintaxis

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

Parámetros

[in] pbc

Puntero a la interfaz IBindCtx en el contexto de enlace que se va a usar en esta operación de enlace. El contexto de enlace almacena en caché los objetos enlazados durante el proceso de enlace, contiene parámetros que se aplican a todas las operaciones mediante el contexto de enlace y proporciona los medios por los que la implementación del moniker debe recuperar información sobre su entorno.

[in] dwReduceHowFar

Especifica cuánto se puede reducir este moniker. Este parámetro debe ser uno de los valores de la enumeración MKRREDUCE .

[in, out] ppmkToLeft

En la entrada, un puntero a una variable de puntero IMoniker que contiene el puntero de interfaz al moniker a la izquierda de este moniker. Este parámetro se usa principalmente por los implementadores de moniker para permitir la cooperación entre los distintos componentes de un moniker compuesto; Normalmente, los clientes de moniker pueden pasar NULL.

Al devolver, *ppmkToLeft se establece normalmente en NULL, lo que indica que no hay ningún cambio en el moniker original a la izquierda. En raras situaciones, *ppmkToLeft indica un moniker, lo que indica que el moniker anterior a la izquierda debe ignorarse y el moniker devuelto a través de *ppmkToLeft es el reemplazo. En tal situación, la implementación debe llamar a Release en el antiguo moniker a la izquierda de este moniker y debe llamar a AddRef en el nuevo moniker devuelto; el autor de la llamada debe liberarlo más adelante. Si se produce un error, la implementación puede dejar el puntero de interfaz sin cambios o establecerlo en NULL.

[out] ppmkReduced

Puntero a una variable de puntero IMoniker que recibe el puntero de interfaz a la forma reducida de este moniker, que puede ser NULL si se produce un error o si este moniker se reduce a nada. Si no se puede reducir este moniker, *ppmkReduced se establece simplemente en este moniker y el valor devuelto es MK_S_REDUCED_TO_SELF. Si *ppmkReduced no es NULL, la implementación debe llamar a AddRef en el nuevo moniker; es responsabilidad del autor de la llamada llamar a Release. (Esto es cierto incluso si *ppmkReduced se establece en este moniker).

Valor devuelto

Este método puede devolver los valores devueltos estándar E_OUTOFMEMORY y E_UNEXPECTED, así como los siguientes valores.

Código devuelto Descripción
S_OK
El método se completó correctamente.
MK_S_REDUCED_TO_SELF
Este moniker no se pudo reducir aún más, por lo que ppmkReduced indica este moniker.
MK_E_EXCEEDEDDEADLINE
No se pudo completar la operación dentro del límite de tiempo especificado por la estructura de BIND_OPTS del contexto de enlace.

Comentarios

Este método está pensado para los siguientes usos:

  • Habilite la construcción de macros o alias definidos por el usuario como nuevos tipos de clases de moniker. Cuando se reduce, se devuelve el moniker al que se evalúa la macro.
  • Habilite la construcción de un tipo de moniker que realiza un seguimiento de los datos a medida que se mueve. Cuando se reduce, se devuelve el moniker de los datos en su ubicación actual.
  • En los sistemas de archivos que admiten un método basado en identificadores de acceso a los archivos que son independientes de los nombres de archivo; Un moniker de archivo podría reducirse a un moniker que contiene uno de estos identificadores.
La intención de las marcas MKRREDUCE pasadas en el parámetro dwReduceHowFar es proporcionar la capacidad de reducir mediante programación un moniker a un formulario cuyo nombre para mostrar sea reconocible para el usuario. Por ejemplo, las rutas de acceso del sistema de archivos, los marcadores en documentos de procesamiento de texto y los nombres de rango de hojas de cálculo son reconocibles para los usuarios. Por el contrario, una macro o un alias encapsulado en un moniker no son reconocibles para los usuarios.

Notas a los autores de llamadas

Las clases de moniker proporcionadas por el sistema no implementan actualmente los escenarios descritos anteriormente.

Debe llamar a Reduce antes de comparar dos monikers con el método IMoniker::IsEqual porque un moniker reducido está en su forma más específica. IsEqual puede devolver S_FALSE en dos monikers antes de que se reduzcan y devuelvan S_OK después de que se reduzcan.

Notas para los implementadores

Si se puede reducir el moniker actual, la implementación no debe reducir el moniker en contexto. En su lugar, debe devolver un nuevo moniker que represente el estado reducido del actual. De este modo, el autor de la llamada sigue teniendo la opción de usar el moniker noducido (por ejemplo, enumerando sus componentes). La implementación debe reducir el moniker al menos hasta que se solicite.

Notas específicas de la implementación

Implementación Notas
Anti-moniker Este método devuelve MK_S_REDUCED_TO_SELF y devuelve el mismo moniker.
Moniker de clase Este método devuelve MK_S_REDUCED_TO_SELF y devuelve el mismo moniker.
Moniker de archivo Este método devuelve MK_S_REDUCED_TO_SELF y devuelve el mismo moniker.
Moniker compuesto genérico Este método llama recursivamente a Reduce para cada uno de sus monikers de componentes. Si alguno de los componentes se reduce a sí mismo, el método devuelve S_OK y pasa una composición de los componentes reducidos. Si no se ha producido ninguna reducción, el método pasa el mismo moniker y devuelve MK_S_REDUCED_TO_SELF.
Moniker de elemento Este método devuelve MK_S_REDUCED_TO_SELF y devuelve el mismo moniker.
OBJREF moniker Este método devuelve MK_S_REDUCED_TO_SELF y devuelve el mismo moniker.
Moniker de puntero Este método devuelve MK_S_REDUCED_TO_SELF y devuelve el mismo moniker.
Moniker de dirección URL Este método devuelve MK_S_REDUCED_TO_SELF y devuelve el mismo moniker.

Requisitos

Requisito Value
Cliente mínimo compatible Windows 2000 Professional [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows 2000 Server [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado objidl.h

Consulte también

Imoniker