Condividi tramite


Metodo IMoniker::RelativePathTo (objidl.h)

Crea un moniker relativo tra questo moniker e il moniker specificato.

Sintassi

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

Parametri

[in] pmkOther

Puntatore all'interfaccia IMoniker nel moniker in cui deve essere eseguito un percorso relativo.

[out] ppmkRelPath

Puntatore a una variabile puntatore IMoniker che riceve il puntatore dell'interfaccia al moniker relativo. In caso di esito positivo, l'implementazione deve chiamare AddRef sul nuovo moniker; è responsabilità del chiamante chiamare Release. Se si verifica un errore, l'implementazione imposta *ppmkRelPath su NULL.

Valore restituito

Questo metodo può restituire i valori restituiti standard E_OUTOFMEMORY e E_UNEXPECTED, nonché i valori seguenti.

Codice restituito Descrizione
S_OK
Metodo completato correttamente.
MK_S_HIM
Nessun prefisso comune è condiviso dai due moniker e il moniker restituito in ppmkRelPath è pmkOther.
MK_E_NOTBINDABLE
Questo moniker è un moniker relativo, ad esempio un moniker di elemento. Questo moniker deve essere composto con il moniker del relativo contenitore prima di poter determinare un percorso relativo.

Commenti

Un moniker relativo è analogo a un percorso relativo ,ad esempio ".. \backup"). Si supponga, ad esempio, di avere un moniker che rappresenta il percorso "c:\projects\secret\art\pict1.bmp" e un altro moniker che rappresenta il percorso "c:\projects\secret\docs\chap1.txt". Chiamando RelativePathTo sul primo moniker, passando il secondo come parametro pmkOther , creerebbe un moniker relativo che rappresenta il percorso ".. \docs\chap1.txt".

Note ai chiamanti

I client moniker in genere non devono chiamare RelativePathTo. Questo metodo viene chiamato principalmente dal gestore predefinito per gli oggetti collegati. Gli oggetti collegati contengono sia un moniker assoluto che un moniker relativo per identificare l'origine del collegamento. Ciò consente il rilevamento dei collegamenti se l'utente sposta un albero di directory contenente sia il contenitore che i file di origine. Il gestore predefinito chiama questo metodo per creare un moniker relativo dal documento contenitore all'origine del collegamento. Ovvero chiama RelativePathTo sul moniker che identifica il documento contenitore, passando il moniker che identifica l'origine del collegamento come parametro pmkOther .

Se si chiama RelativePathTo, chiamarlo solo su moniker assoluti, ad esempio un moniker di file o un moniker composito il cui componente più a sinistra è un moniker di file, dove il moniker del file rappresenta un percorso assoluto. Non chiamare questo metodo sui moniker relativi.

Note per gli implementatori

L'implementazione di RelativePathTo deve innanzitutto determinare se pmkOther è un moniker di una classe riconosciuta e per cui è possibile fornire una gestione speciale, ad esempio se è della stessa classe di questo moniker. In tal caso, l'implementazione deve determinare il percorso relativo. In caso contrario, deve passare entrambi i moniker in una chiamata alla funzione MonikerRelativePathTo , che gestisce correttamente il case generico.

Il primo passaggio per determinare un percorso relativo consiste nel determinare il prefisso comune di questo moniker e pmkOther. Il passaggio successivo consiste nell'suddividere questo moniker e pmkOther in due parti, ad esempio (P, myTail) e (P, otherTail) rispettivamente, dove P è il prefisso comune. Il percorso relativo corretto è quindi l'inverso di myTail composto con otherTail:

Comp( Inv( myTail ), otherTail )

dove Comp() rappresenta l'operazione di composizione e Inv() rappresenta l'operazione inversa.

Per determinati tipi di moniker, non è possibile usare il metodo IMoniker::Inverse per costruire l'inverso di myTail. Ad esempio, un moniker di file restituisce un anti-moniker come inverso, mentre il relativo metodo RelativePathTo deve usare uno o più moniker di file che rappresentano il percorso ".." per costruire l'inverso di myTail.

Note specifiche dell'implementazione

Implementazione Note
Anti-moniker Questo metodo restituisce MK_S_HIM e imposta *ppmkRelPath sull'altro moniker.
Moniker di classe Questo metodo restituisce il risultato della chiamata a MonikerRelativePathTo con pmkSrc uguale a questo moniker, pmkOther, ppmkRelPath e TRUE come dwReserved.
Moniker file Questo metodo calcola un moniker che, quando composto a destra di questo moniker, restituisce l'altro moniker. Ad esempio, se il percorso di questo moniker è "C:\work\docs\report.doc" e se l'altro moniker è "C:\work\art\picture.bmp", il percorso del moniker calcolato sarà ".. \.. \art\picture.bmp".
Moniker composito generico Questo metodo trova il prefisso comune dei due moniker e crea due moniker costituiti dal resto quando viene rimosso il prefisso comune. Crea quindi l'inverso per il resto di questo moniker e compone il resto dell'altro moniker a destra di esso.
Moniker elemento Questo metodo restituisce MK_E_NOTBINDABLE e imposta *ppmkRelPath su NULL.
Moniker OBJREF Questo metodo restituisce E_NOTIMPL.
Moniker puntatore Questo metodo restituisce E_NOTIMPL.
Moniker URL Questo metodo restituisce E_NOTIMPL.

Requisiti

Requisito Valore
Client minimo supportato Windows 2000 Professional [solo app desktop]
Server minimo supportato Windows 2000 Server [solo app desktop]
Piattaforma di destinazione Windows
Intestazione objidl.h

Vedi anche

Imoniker

MonikerRelativePathTo