Condividi tramite


Metodo IMoniker::CommonPrefixWith (objidl.h)

Crea un nuovo moniker basato sul prefisso che questo moniker ha in comune con il moniker specificato.

Sintassi

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

Parametri

[in] pmkOther

Puntatore all'interfaccia IMoniker in un altro moniker da confrontare con questo per determinare se è presente un prefisso comune.

[out] ppmkPrefix

Indirizzo di una variabile puntatore IMoniker* che riceve il puntatore dell'interfaccia al moniker che è il prefisso comune di questo moniker e pmkOther. In caso di esito positivo, l'implementazione deve chiamare AddRef nel moniker risultante; è responsabilità del chiamante chiamare Release. Se si verifica un errore o se non è presente alcun prefisso comune, l'implementazione deve impostare *ppmkPrefix su NULL.

Valore restituito

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

Codice restituito Descrizione
S_OK
Esiste un prefisso comune che non è questo moniker né pmkOther.
MK_S_NOPREFIX
Nessun prefisso comune esiste.
MK_S_HIM
L'intero pmkOther è un prefisso di questo moniker.
MK_S_US
I due moniker sono identici.
MK_S_ME
Questo moniker è un prefisso del moniker pmkOther .
MK_S_NOTBINDABLE
Questo metodo è stato chiamato su un moniker relativo. Non è significativo prendere il prefisso comune su un moniker relativo.

Commenti

CommonPrefixWith crea un nuovo moniker costituito dai prefissi comuni del moniker in questo oggetto moniker e da un altro moniker. Ad esempio, se un moniker rappresenta il percorso "c:\projects\secret\art\pict1.bmp" e un altro moniker rappresenta il percorso "c:\projects\secret\docs\chap1.txt", il prefisso comune di questi due moniker sarebbe un moniker che rappresenta il percorso "c:\projects\secret".

Note ai chiamanti

Il metodo CommonPrefixWith viene chiamato principalmente nell'implementazione del metodo IMoniker::RelativePathTo . I client che usano un moniker per individuare un oggetto raramente devono chiamare questo metodo.

Chiamare questo metodo solo se pmkOther e questo moniker sono entrambi moniker assoluti. Un moniker assoluto è un moniker di file o un composito generico il cui componente più sinistro è un moniker di file che rappresenta un percorso assoluto. Non chiamare questo metodo sui moniker relativi perché non produrrebbe risultati significativi.

Note per gli implementatori

L'implementazione deve prima determinare se pmkOther è un moniker di una classe che si riconosce 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 prefisso comune dei due moniker. In caso contrario, deve passare entrambi i moniker in una chiamata alla funzione MonikerCommonPrefixWith , che gestisce correttamente il caso generico.

Note specifiche dell'implementazione

Implementazione Note
Anti-moniker Se l'altro moniker è anche un moniker anti-moniker, il metodo restituisce MK_S_US e imposta ppmkPrefix su questo moniker. In caso contrario, il metodo chiama la funzione MonikerCommonPrefixWith . Questa funzione gestisce correttamente il caso in cui l'altro moniker è un composito generico.
Moniker classe Se pmkOther è uguale a questo moniker, recupera un puntatore a questo moniker e restituisce MK_S_US. Se pmkOther è un moniker di classe ma non è uguale a questo moniker, restituisce MK_E_NOPREFIX. In caso contrario, restituisce il risultato della chiamata a MonikerCommonPrefixWith con se stesso come pmkThis, pmkOther e ppmkPrefix, che gestisce il caso in cui pmkOther è un moniker composito generico.
Moniker file Se entrambi i moniker sono moniker di file, questo metodo restituisce un moniker di file basato sui componenti comuni all'inizio di due moniker di file. I componenti di un moniker di file possono essere dei tipi seguenti:
  • Nome computer del modulo \\server\share. Un nome computer viene considerato come un singolo componente, quindi due moniker che rappresentano i percorsi "\\myserver\public\work" e "\myserver\private\games" non hanno "\\myserver" come prefisso comune.
  • Una designazione di unità (ad esempio"C:").
  • Directory o nome file.
Se l'altro moniker non è un moniker di file, questo metodo passa entrambi i moniker in una chiamata alla funzione MonikerCommonPrefixWith . Questa funzione gestisce correttamente il caso in cui l'altro moniker è un composito generico.

Questo metodo restituisce MK_E_NOPREFIX se non è presente alcun prefisso comune.

Moniker composito generico Se l'altro moniker è composto, questo metodo confronta i componenti di ogni composito da sinistra a destra. Il moniker di prefisso comune restituito potrebbe anche essere un moniker composito, a seconda del numero di componenti più a sinistra comuni a entrambi i moniker. Se l'altro moniker non è composito, il metodo lo confronta semplicemente con il componente più sinistro di questo moniker.

Se i moniker sono uguali, il metodo restituisce MK_S_US e imposta ppmkPrefix su questo moniker. Se l'altro moniker è un prefisso di questo moniker, il metodo restituisce MK_S_HIM e imposta ppmkPrefix sull'altro moniker. Se questo moniker è un prefisso dell'altro, questo metodo restituisce MK_S_ME e imposta ppmkPrefix su questo moniker.

Se non è presente alcun prefisso comune, questo metodo restituisce MK_E_NOPREFIX e imposta ppmkPrefix su NULL.

Moniker elemento Se l'altro moniker è un moniker di elemento uguale a questo moniker, questo metodo imposta *ppmkPrefix su questo moniker e restituisce MK_S_US; in caso contrario, il metodo chiama la funzione MonikerCommonPrefixWith . Questa funzione gestisce correttamente il caso in cui l'altro moniker è un composito generico.
Moniker OBJREF Se i due moniker sono uguali, questo metodo restituisce MK_S_US e imposta *ppmkPrefix su NULL. Se l'altro moniker non è un moniker OBJREF, questo metodo passa entrambi i moniker alla funzione MonikerCommonPrefixWith . Questa funzione gestisce correttamente il caso in cui l'altro moniker è un composito generico.

Se non è presente alcun prefisso comune, questo metodo restituisce MK_E_NOPREFIX.

Moniker puntatore Se i due moniker sono uguali, questo metodo restituisce MK_S_US e imposta *ppmkPrefix su questo moniker. In caso contrario, il metodo restituisce MK_E_NOPREFIX e imposta *ppmkPrefix su NULL.
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

MonikerCommonPrefixWith