Metodo IMoniker::BindToStorage (objidl.h)

Esegue l'associazione alla risorsa di archiviazione per l'oggetto specificato. A differenza del metodo IMoniker::BindToObject , questo metodo non attiva l'oggetto identificato dal moniker.

Sintassi

HRESULT BindToStorage(
  [in]  IBindCtx *pbc,
  [in]  IMoniker *pmkToLeft,
  [in]  REFIID   riid,
  [out] void     **ppvObj
);

Parametri

[in] pbc

Puntatore all'interfaccia IBindCtx nell'oggetto contesto di associazione, utilizzato 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] pmkToLeft

Se il moniker fa parte di un moniker composito, puntatore 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 devono usare NULL.

[in] riid

Riferimento all'identificatore dell'interfaccia di archiviazione richiesta, il cui puntatore verrà restituito in ppvObj. Le interfacce di archiviazione comunemente richieste includono IStorage, IStream e ILockBytes.

[out] ppvObj

Indirizzo della variabile del puntatore che riceve il puntatore di interfaccia richiesto in riid. Al termine della restituzione, *ppvObj contiene il puntatore di interfaccia richiesto alla risorsa di archiviazione dell'oggetto identificato dal moniker. In caso di esito positivo, l'implementazione deve chiamare AddRef nella risorsa di archiviazione. È responsabilità del chiamante chiamare Release. Se si verifica un errore, *ppvObj deve essere NULL.

Valore restituito

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

Codice restituito Descrizione
S_OK
L'operazione di associazione ha avuto esito positivo.
MK_E_NOSTORAGE
L'oggetto identificato da questo moniker non dispone di una propria risorsa di archiviazione.
MK_E_EXCEEDEDDEADLINE
Impossibile completare l'operazione di associazione entro il limite di tempo specificato dalla struttura di BIND_OPTS del contesto di associazione.
MK_E_CONNECTMANUALLY
L'operazione non è riuscita a connettersi alla risorsa di archiviazione, probabilmente perché non è stato possibile connettersi a un dispositivo di rete. Per altre informazioni, vedere IMoniker::BindToObject.
MK_E_INTERMEDIATEINTERFACENOTSUPPORTED
È stato trovato un oggetto intermedio, ma non supporta un'interfaccia necessaria per completare l'operazione di associazione. Ad esempio, un moniker dell'elemento restituisce questo valore se il contenitore non supporta l'interfaccia IOleItemContainer .
STG_E_ACCESSDENIED
Impossibile accedere all'oggetto di archiviazione.
 

Questo metodo può anche restituire gli errori associati al metodo IOleItemContainer::GetObject .

Commenti

Esiste una differenza importante tra i metodi BindToObject e BindToStorage . Se, ad esempio, si dispone di un moniker che identifica un oggetto foglio di calcolo, chiamando BindToObject è possibile accedere all'oggetto foglio di calcolo stesso, mentre la chiamata a BindToStorage fornisce l'accesso all'oggetto di archiviazione in cui si trova il foglio di calcolo.

Note ai chiamanti

Anche se nessuna delle classi moniker COM chiama questo metodo nelle operazioni di associazione, potrebbe essere opportuno chiamarla nell'implementazione di una nuova classe moniker. È possibile chiamare questo metodo in un'implementazione di BindToObject che richiede informazioni dall'oggetto identificato dal parametro pmkToLeft e può recuperarlo dall'archiviazione permanente dell'oggetto senza attivazione. Ad esempio, se i moniker vengono usati per identificare gli oggetti che possono essere attivati senza attivare i contenitori, questo metodo può risultare utile.

Un client in grado di leggere l'archiviazione dell'oggetto identificato dal moniker può anche chiamare questo metodo.

Note per gli implementatori

L'implementazione deve individuare l'archiviazione permanente per l'oggetto identificato dal moniker corrente e restituire il puntatore di interfaccia desiderato. Alcuni tipi di moniker rappresentano pseudo-oggetti, ovvero oggetti che non dispongono di una risorsa di archiviazione permanente. Tali oggetti comprendono una parte dello stato interno del relativo contenitore, ad esempio un intervallo di celle in un foglio di calcolo. Se la classe moniker identifica questo tipo di oggetto, l'implementazione di BindToStorage deve restituire l'errore MK_E_NOSTORAGE.

Se la struttura di BIND_OPTS del contesto di associazione specifica il flag BINDFLAGS_JUSTTESTEXISTENCE, l'implementazione ha la possibilità di restituire NULL in ppvObj (anche se è anche possibile ignorare il flag ed eseguire l'operazione di associazione completa).

Note specifiche dell'implementazione

Implementazione Note
Anti-moniker Questo metodo restituisce E_NOTIMPL.
Moniker di classe Questo metodo inoltra al moniker della classe BindToObject.
Moniker file Questo metodo apre il file specificato dal percorso rappresentato dal moniker e restituisce un puntatore IStorage a tale file. Il metodo supporta solo l'associazione all'interfaccia IStorage ; se viene richiesto IStream o ILockBytes in riid, il metodo restituisce E_UNSPEC e, se sono richieste altre interfacce, questo metodo restituisce E_NOINTERFACE. A meno che pmkToLeft non sia un moniker di classe, pmkToLeft deve essere NULL, come nell'implementazione di IMoniker::BindToObject.
Moniker composito generico Questo metodo chiama in modo ricorsivo BindToStorage sul componente più a destra del composito, passando il resto del composito come parametro pmkToLeft per tale chiamata.
Moniker elemento Se pmkToLeft è NULL, questo metodo restituisce E_INVALIDARG. In caso contrario, il metodo chiama IMoniker::BindToObject nel parametro pmkToLeft , richiedendo un puntatore all'interfaccia IOleItemContainer . Il metodo chiama quindi IOleItemContainer::GetObjectStorage per l'interfaccia richiesta.
Moniker OBJREF Questo metodo ottiene un puntatore sottoposto a marshalling all'interfaccia richiesta nella risorsa di archiviazione che contiene l'oggetto in esecuzione. Poiché il moniker OBJREF rappresenta un oggetto in esecuzione, non viene eseguita alcuna attivazione. Se l'oggetto rappresentato non è più in esecuzione, BindToStorage ha esito negativo con E_UNEXPECTED.
Moniker puntatore Questo metodo esegue una query sul puntatore di cui è stato eseguito il wrapping per l'interfaccia richiesta.
Moniker URL L'implementazione di sistema dei moniker URL supporta BindToStorage per gli oggetti flusso in tutti gli URL e per gli oggetti di archiviazione nel caso in cui la risorsa designata sia un file composto.

Poiché il moniker URL supporta l'associazione asincrona, il valore restituito effettivo di BindToStorage può variare a seconda dei parametri dell'oggetto stabiliti nel contesto di associazione. Tuttavia, la semantica dell'operazione di associazione è identica indipendentemente dall'utilizzo sincrono o asincrono, come indicato di seguito:

  • Il moniker URL esegue il pull di altre informazioni per l'operazione di associazione dal contesto di associazione. Ad esempio, il moniker può ottenere puntatori alle interfacce IBindStatusCallback e IEnumFORMATETC registrate nel contesto di associazione. Altre informazioni possono includere opzioni di associazione aggiuntive specificate nel contesto di associazione tramite IBindCtx::SetBindOptions, ad esempio il parametro dwTickCountDeadline o il valore grfFlags di BIND_MAYBOTHERUSER. Il moniker esegue quindi una query sul client chiamando IBindStatusCallback::GetBindInfo e avvia l'operazione di associazione con il trasporto e passa l'IBinding risultante al client chiamando IBindStatusCallback::OnStartBinding.
  • Se il chiamante ha richiesto un IStream o IStorage asincrono specificando il flag BINDF_ASYNCSTORAGE nella struttura BINDINFO recuperato da IBindStatusCallback::GetBindInfo, il moniker URL restituisce l'oggetto appena possibile. Chiamate a questi oggetti IStorage o IStream che fanno riferimento ai dati non ancora disponibili restituiscono E_PENDING.
  • Se il chiamante non specifica IStream asincrono o IStorage come descritto in precedenza, il moniker URL restituirà comunque un oggetto tramite il metodo IBindStatusCallback::OnDataAvailable appena possibile. Tuttavia, le chiamate a questi oggetti che fanno riferimento ai dati non ancora disponibili verranno bloccate fino a quando i dati non diventano disponibili. Per alcune applicazioni, questa operazione richiederà la minima modifica del codice di I/O esistente, ma potrebbe comunque comportare prestazioni migliori a seconda dei modelli di accesso.

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