Metodo IMoniker::Reduce (objidl.h)

Riduce un moniker alla forma più semplice.

Sintassi

HRESULT Reduce(
  [in]      IBindCtx *pbc,
  [in]      DWORD    dwReduceHowFar,
  [in, out] IMoniker **ppmkToLeft,
  [out]     IMoniker **ppmkReduced
);

Parametri

[in] pbc

Puntatore all'interfaccia IBindCtx nel contesto di associazione da usare in questa operazione di associazione. Il contesto di associazione memorizza nella cache gli oggetti associati durante il processo di associazione, contiene parametri che si applicano a tutte le operazioni che usano il contesto di associazione e fornisce i mezzi con cui l'implementazione del moniker deve recuperare informazioni sul relativo ambiente.

[in] dwReduceHowFar

Specifica il grado di riduzione del moniker. Questo parametro deve essere uno dei valori dell'enumerazione MKRREDUCE .

[in, out] ppmkToLeft

All'ingresso, un puntatore a una variabile puntatore IMoniker che contiene il puntatore di interfaccia al moniker a sinistra di questo moniker. Questo parametro viene usato principalmente dagli implementatori di moniker per consentire la cooperazione tra i vari componenti di un moniker composito; i client moniker possono in genere passare NULL.

In caso contrario, *ppmkToLeft è in genere impostato su NULL, che indica che non viene apportata alcuna modifica al moniker originale a sinistra. In rari casi, *ppmkToLeft indica un moniker, che indica che il moniker precedente a sinistra deve essere ignorato e il moniker restituito tramite *ppmkToLeft è la sostituzione. In tale situazione, l'implementazione deve chiamare Release sul moniker precedente a sinistra di questo moniker e deve chiamare AddRef sul nuovo moniker restituito; il chiamante deve rilasciarlo in un secondo momento. Se si verifica un errore, l'implementazione può lasciare invariato il puntatore all'interfaccia o impostarlo su NULL.

[out] ppmkReduced

Puntatore a una variabile puntatore IMoniker che riceve il puntatore di interfaccia alla forma ridotta di questo moniker, che può essere NULL se si verifica un errore o se questo moniker viene ridotto a nulla. Se questo moniker non può essere ridotto, *ppmkReduced viene semplicemente impostato su questo moniker e il valore restituito è MK_S_REDUCED_TO_SELF. Se *ppmkReduced è diverso da NULL, l'implementazione deve chiamare AddRef sul nuovo moniker; è responsabilità del chiamante chiamare Release. Questo vale anche se *ppmkReduced è impostato su questo moniker.

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_REDUCED_TO_SELF
Questo moniker non può essere ridotto ulteriormente, quindi ppmkReduced indica questo moniker.
MK_E_EXCEEDEDDEADLINE
Impossibile completare l'operazione entro il limite di tempo specificato dalla struttura di BIND_OPTS del contesto di associazione.

Commenti

Questo metodo è destinato agli usi seguenti:

  • Abilitare la costruzione di macro o alias definiti dall'utente come nuovi tipi di classi moniker. In caso di riduzione, viene restituito il moniker in cui viene valutata la macro.
  • Abilitare la costruzione di un tipo di moniker che tiene traccia dei dati durante lo spostamento. In caso di riduzione, viene restituito il moniker dei dati nella posizione corrente.
  • Nei file system che supportano un metodo basato su identificatore per l'accesso ai file indipendenti dai nomi file; un moniker di file può essere ridotto a un moniker che contiene uno di questi identificatori.
La finalità dei flag MKRREDUCE passati nel parametro dwReduceHowFar consiste nel fornire la possibilità di ridurre a livello di codice un moniker in una maschera il cui nome visualizzato è riconoscibile per l'utente. Ad esempio, i percorsi nel file system, i segnalibri nei documenti di elaborazione delle parole e i nomi di intervallo nei fogli di calcolo sono tutti riconoscibili per gli utenti. Al contrario, una macro o un alias incapsulato in un moniker non sono riconoscibili per gli utenti.

Note ai chiamanti

Gli scenari descritti in precedenza non sono attualmente implementati dalle classi moniker fornite dal sistema.

Devi chiamare Reduce prima di confrontare due moniker usando il metodo IMoniker::IsEqual perché un moniker ridotto è nel formato più specifico. IsEqual può restituire S_FALSE su due moniker prima che vengano ridotti e restituiti S_OK dopo la riduzione.

Note per gli implementatori

Se il moniker corrente può essere ridotto, l'implementazione non deve ridurre il moniker sul posto. Deve invece restituire un nuovo moniker che rappresenta lo stato ridotto di quello corrente. In questo modo, il chiamante ha ancora la possibilità di usare il moniker non introdotto , ad esempio enumerando i relativi componenti. L'implementazione deve ridurre il moniker almeno per quanto richiesto.

Note specifiche dell'implementazione

Implementazione Note
Anti-moniker Questo metodo restituisce MK_S_REDUCED_TO_SELF e passa indietro lo stesso moniker.
Moniker di classe Questo metodo restituisce MK_S_REDUCED_TO_SELF e passa indietro lo stesso moniker.
Moniker file Questo metodo restituisce MK_S_REDUCED_TO_SELF e passa indietro lo stesso moniker.
Moniker composito generico Questo metodo chiama in modo ricorsivo Reduce per ogni moniker componente. Se uno dei componenti si riduce, il metodo restituisce S_OK e restituisce un composto dei componenti ridotti. Se non si verifica alcuna riduzione, il metodo restituisce lo stesso moniker e restituisce MK_S_REDUCED_TO_SELF.
Moniker elemento Questo metodo restituisce MK_S_REDUCED_TO_SELF e passa indietro lo stesso moniker.
Moniker OBJREF Questo metodo restituisce MK_S_REDUCED_TO_SELF e passa indietro lo stesso moniker.
Moniker puntatore Questo metodo restituisce MK_S_REDUCED_TO_SELF e passa indietro lo stesso moniker.
Moniker URL Questo metodo restituisce MK_S_REDUCED_TO_SELF e passa indietro lo stesso moniker.

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