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

Crea un nuevo moniker basado en el prefijo que este moniker tiene en común con el moniker especificado.

Sintaxis

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

Parámetros

[in] pmkOther

Puntero a la interfaz IMoniker en otro moniker que se va a comparar con este para determinar si hay un prefijo común.

[out] ppmkPrefix

Dirección de una variable de puntero IMoniker* que recibe el puntero de interfaz al moniker que es el prefijo común de este moniker y pmkOther. Cuando se ejecuta correctamente, la implementación debe llamar a AddRef en el moniker resultante; es responsabilidad del autor de la llamada llamar a Release. Si se produce un error o si no hay ningún prefijo común, la implementación debe establecer *ppmkPrefix en NULL.

Valor devuelto

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

Código devuelto Descripción
S_OK
Existe un prefijo común que no es este moniker ni pmkOther.
MK_S_NOPREFIX
No existe ningún prefijo común.
MK_S_HIM
Todo pmkOther es un prefijo de este moniker.
MK_S_US
Los dos monikers son idénticos.
MK_S_ME
Este moniker es un prefijo del pmkOther moniker.
MK_S_NOTBINDABLE
Se llamó a este método en un moniker relativo. No es significativo tomar el prefijo común en un moniker relativo.

Comentarios

CommonPrefixWith crea un nuevo moniker que consta de los prefijos comunes del moniker en este objeto de moniker y otro moniker. Por ejemplo, si un moniker representa la ruta de acceso "c:\projects\secret\art\pict1.bmp" y otro moniker representa la ruta de acceso "c:\projects\secret\docs\chap1.txt", el prefijo común de estos dos monikers sería un moniker que representa la ruta de acceso "c:\projects\secret".

Notas a los autores de llamadas

El método CommonPrefixWith se llama principalmente en la implementación del método IMoniker::RelativePathTo . Los clientes que usan un moniker para localizar un objeto rara vez necesitan llamar a este método.

Llame a este método solo si pmkOther y este moniker son monikers absolutos. Un moniker absoluto es un moniker de archivo o un compuesto genérico cuyo componente más izquierdo es un moniker de archivo que representa una ruta de acceso absoluta. No llame a este método en monikers relativos porque no generaría resultados significativos.

Notas para los implementadores

La implementación debe determinar primero si pmkOther es un moniker de una clase que reconoce y para la que puede proporcionar un control especial (por ejemplo, si es de la misma clase que este moniker). Si es así, la implementación debe determinar el prefijo común de los dos monikers. De lo contrario, debe pasar ambos monikers en una llamada a la función MonikerCommonPrefixWith , que controla correctamente el caso genérico.

Notas específicas de la implementación

Implementación Notas
Anti-moniker Si el otro moniker también es un anti-moniker, el método devuelve MK_S_US y establece ppmkPrefix en este moniker. De lo contrario, el método llama a la función MonikerCommonPrefixWith . Esta función controla correctamente el caso en el que el otro moniker es una composición genérica.
Moniker de clase Si pmkOther es igual a este moniker, recupera un puntero a este moniker y devuelve MK_S_US. Si pmkOther es un moniker de clase pero no es igual a este moniker, devuelve MK_E_NOPREFIX. De lo contrario, devuelve el resultado de llamar a MonikerCommonPrefixWith con sí mismo como pmkThis, pmkOther y ppmkPrefix, que controla el caso en el que pmkOther es un moniker compuesto genérico.
Moniker de archivo Si ambos monikers son monikers de archivo, este método devuelve un moniker de archivo basado en los componentes comunes al principio de dos monikers de archivo. Los componentes de un moniker de archivo pueden ser de los siguientes tipos:
  • Nombre de equipo del formulario \\server\share. Un nombre de equipo se trata como un único componente, por lo que dos monikers que representan las rutas de acceso "\\myserver\public\work" y "\\myserver\private\games" no tienen "\\myserver" como prefijo común.
  • Designación de unidad (por ejemplo, "C:").
  • Un directorio o un nombre de archivo.
Si el otro moniker no es un moniker de archivo, este método pasa ambos monikers en una llamada a la función MonikerCommonPrefixWith . Esta función controla correctamente el caso en el que el otro moniker es una composición genérica.

Este método devuelve MK_E_NOPREFIX si no hay ningún prefijo común.

Moniker compuesto genérico Si el otro moniker es un compuesto, este método compara los componentes de cada compuesto de izquierda a derecha. El moniker de prefijo común devuelto también podría ser un moniker compuesto, dependiendo del número de componentes más a la izquierda comunes a ambos monikers. Si el otro moniker no es un compuesto, el método simplemente lo compara con el componente más izquierdo de este moniker.

Si los monikers son iguales, el método devuelve MK_S_US y establece ppmkPrefix en este moniker. Si el otro moniker es un prefijo de este moniker, el método devuelve MK_S_HIM y establece ppmkPrefix en el otro moniker. Si este moniker es un prefijo del otro, este método devuelve MK_S_ME y establece ppmkPrefix en este moniker.

Si no hay ningún prefijo común, este método devuelve MK_E_NOPREFIX y establece ppmkPrefix en NULL.

Moniker de elemento Si el otro moniker es un moniker de elemento que es igual a este moniker, este método establece *ppmkPrefix en este moniker y devuelve MK_S_US; de lo contrario, el método llama a la función MonikerCommonPrefixWith . Esta función controla correctamente el caso en el que el otro moniker es una composición genérica.
OBJREF moniker Si los dos monikers son iguales, este método devuelve MK_S_US y establece *ppmkPrefix en NULL. Si el otro moniker no es un moniker OBJREF, este método pasa ambos monikers a la función MonikerCommonPrefixWith . Esta función controla correctamente el caso en el que el otro moniker es una composición genérica.

Si no hay ningún prefijo común, este método devuelve MK_E_NOPREFIX.

Moniker de puntero Si los dos monikers son iguales, este método devuelve MK_S_US y establece *ppmkPrefix en este moniker. De lo contrario, el método devuelve MK_E_NOPREFIX y establece *ppmkPrefix en NULL.
Moniker de dirección URL Este método devuelve E_NOTIMPL.

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

MonikerCommonPrefixWith