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 |
---|---|
|
L'operazione di associazione ha avuto esito positivo. |
|
L'oggetto identificato da questo moniker non dispone di una propria risorsa di archiviazione. |
|
Impossibile completare l'operazione di associazione entro il limite di tempo specificato dalla struttura di BIND_OPTS del contesto di associazione. |
|
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. |
|
È 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 . |
|
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:
|
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 |