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 |
---|---|
|
Existe un prefijo común que no es este moniker ni pmkOther. |
|
No existe ningún prefijo común. |
|
Todo pmkOther es un prefijo de este moniker. |
|
Los dos monikers son idénticos. |
|
Este moniker es un prefijo del pmkOther moniker. |
|
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:
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 |