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 |
---|---|
|
El método se completó correctamente. |
|
Este moniker no se pudo reducir aún más, por lo que ppmkReduced indica este moniker. |
|
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.
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 |