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

Crea un moniker relativo entre este moniker y el moniker especificado.

Sintaxis

HRESULT RelativePathTo(
  [in]  IMoniker *pmkOther,
  [out] IMoniker **ppmkRelPath
);

Parámetros

[in] pmkOther

Puntero a la interfaz IMoniker en el moniker al que se debe tomar una ruta de acceso relativa.

[out] ppmkRelPath

Puntero a una variable de puntero IMoniker que recibe el puntero de interfaz al moniker relativo. Cuando se realiza correctamente, la implementación debe llamar a AddRef en el nuevo moniker; es responsabilidad del autor de la llamada llamar a Release. Si se produce un error, la implementación establece *ppmkRelPath en NULL.

Valor devuelto

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

Código devuelto Descripción
S_OK
El método se completó correctamente.
MK_S_HIM
No hay ningún prefijo común compartido por los dos monikers y el moniker devuelto en ppmkRelPath es pmkOther.
MK_E_NOTBINDABLE
Este moniker es un moniker relativo, como un moniker de elemento. Este moniker debe estar compuesto con el moniker de su contenedor antes de que se pueda determinar una ruta de acceso relativa.

Comentarios

Un moniker relativo es análogo a una ruta de acceso relativa (como ".. \backup"). Por ejemplo, supongamos que tiene un moniker que representa la ruta de acceso "c:\projects\secret\art\pict1.bmp" y otro moniker que representa la ruta de acceso "c:\projects\secret\docs\chap1.txt". Al llamar a RelativePathTo en el primer moniker, pasando el segundo como parámetro pmkOther , se crearía un moniker relativo que representa la ruta de acceso ".. \docs\chap1.txt".

Notas a los autores de llamadas

Normalmente, los clientes de moniker no necesitan llamar a RelativePathTo. Este método se llama principalmente por el controlador predeterminado para los objetos vinculados. Los objetos vinculados contienen un moniker absoluto y relativo para identificar el origen del vínculo. (Esto habilita el seguimiento de vínculos si el usuario mueve un árbol de directorios que contiene el contenedor y los archivos de origen). El controlador predeterminado llama a este método para crear un moniker relativo desde el documento contenedor al origen del vínculo. (Es decir, llama a RelativePathTo en el moniker que identifica el documento contenedor y pasa el moniker que identifica el origen del vínculo como el parámetro pmkOther ).

Si llamas a RelativePathTo, llámalo solo en monikers absolutos, por ejemplo, un moniker de archivo o un moniker compuesto cuyo componente situado más a la izquierda es un moniker de archivo, donde el moniker de archivo representa una ruta de acceso absoluta. No llame a este método en monikers relativos.

Notas para los implementadores

La implementación de RelativePathTo 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 la ruta de acceso relativa. De lo contrario, debe pasar ambos monikers en una llamada a la función MonikerRelativePathTo , que controla correctamente el caso genérico.

El primer paso para determinar una ruta de acceso relativa es determinar el prefijo común de este moniker y pmkOther. El siguiente paso consiste en dividir este moniker y pmkOther en dos partes cada una, como (P, myTail) y (P, otherTail), respectivamente, donde P es el prefijo común. La ruta de acceso relativa correcta es, a continuación, la inversa de myTail compuesta con otroTail:

Comp( Inv( myTail ), otherTail )

donde Comp() representa la operación de composición y Inv() representa la operación inversa.

Para determinados tipos de monikers, no puede usar el método IMoniker::Inverse para construir el inverso de myTail. Por ejemplo, un moniker de archivo devuelve un anti-moniker como inverso, mientras que su método RelativePathTo debe usar uno o varios monikers de archivo que representan la ruta de acceso ".." para construir el inverso de myTail.

Notas específicas de la implementación

Implementación Notas
Anti-moniker Este método devuelve MK_S_HIM y establece *ppmkRelPath en el otro moniker.
Moniker de clase Este método devuelve el resultado de llamar a MonikerRelativePathTo con pmkSrc igual a este moniker, pmkOther, ppmkRelPath y TRUE como dwReserved.
Moniker de archivo Este método calcula un moniker que cuando se compone a la derecha de este moniker produce el otro moniker. Por ejemplo, si la ruta de acceso de este moniker es "C:\work\docs\report.doc" y si el otro moniker es "C:\work\art\picture.bmp", la ruta de acceso del moniker calculado sería ".. \.. \art\picture.bmp".
Moniker compuesto genérico Este método busca el prefijo común de los dos monikers y crea dos monikers que constan del resto cuando se quita el prefijo común. A continuación, crea el inverso para el resto de este moniker y compone el resto del otro moniker a la derecha de él.
Moniker de elemento Este método devuelve MK_E_NOTBINDABLE y establece *ppmkRelPath en NULL.
Moniker de OBJREF Este método devuelve E_NOTIMPL.
Moniker de puntero Este método devuelve E_NOTIMPL.
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

MonikerRelativePathTo