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 |
---|---|
|
Esiste un prefisso comune che non è questo moniker né pmkOther. |
|
Nessun prefisso comune esiste. |
|
L'intero pmkOther è un prefisso di questo moniker. |
|
I due moniker sono identici. |
|
Questo moniker è un prefisso del moniker pmkOther . |
|
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:
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 |