Método IMoniker::BindToStorage (objidl.h)
Enlaza al almacenamiento del objeto especificado. A diferencia del método IMoniker::BindToObject , este método no activa el objeto identificado por el moniker.
Sintaxis
HRESULT BindToStorage(
[in] IBindCtx *pbc,
[in] IMoniker *pmkToLeft,
[in] REFIID riid,
[out] void **ppvObj
);
Parámetros
[in] pbc
Puntero a la interfaz IBindCtx en el objeto de contexto de enlace, que se usa en esta operación de enlace. El contexto de enlace almacena en caché los objetos enlazados durante el proceso de enlace, contiene parámetros que se aplican a todas las operaciones mediante el contexto de enlace y proporciona los medios por los que la implementación del moniker debe recuperar información sobre su entorno.
[in] pmkToLeft
Si el moniker forma parte de un moniker compuesto, puntero al moniker a la izquierda de este moniker. Los implementadores de moniker usan este parámetro principalmente para permitir la cooperación entre los distintos componentes de un moniker compuesto. Los clientes de Moniker deben usar NULL.
[in] riid
Referencia al identificador de la interfaz de almacenamiento solicitada, cuyo puntero se devolverá en ppvObj. Las interfaces de almacenamiento solicitadas normalmente incluyen IStorage, IStream e ILockBytes.
[out] ppvObj
Dirección de la variable de puntero que recibe el puntero de interfaz solicitado en riid. Tras la devolución correcta, *ppvObj contiene el puntero de interfaz solicitado al almacenamiento del objeto que identifica el moniker. Cuando se ejecuta correctamente, la implementación debe llamar a AddRef en el almacenamiento. Es responsabilidad del autor de la llamada llamar a Release. Si se produce un error, *ppvObj debe ser NULL.
Valor devuelto
Este método puede devolver los valores devueltos estándar E_UNEXPECTED, así como los siguientes valores.
Código devuelto | Descripción |
---|---|
|
La operación de enlace se realizó correctamente. |
|
El objeto identificado por este moniker no tiene su propio almacenamiento. |
|
No se pudo completar la operación de enlace dentro del límite de tiempo especificado por la estructura de BIND_OPTS del contexto de enlace. |
|
La operación no pudo conectarse al almacenamiento, posiblemente porque un dispositivo de red no se pudo conectar. Para obtener más información, vea IMoniker::BindToObject. |
|
Se encontró un objeto intermedio, pero no admitía una interfaz necesaria para completar la operación de enlace. Por ejemplo, un moniker de elemento devuelve este valor si su contenedor no admite la interfaz IOleItemContainer . |
|
No se puede acceder al objeto de almacenamiento. |
Este método también puede devolver los errores asociados al método IOleItemContainer::GetObject .
Comentarios
Hay una diferencia importante entre los métodos BindToObject y BindToStorage . Si, por ejemplo, tiene un moniker que identifica un objeto de hoja de cálculo, llamar a BindToObject proporciona acceso al propio objeto de hoja de cálculo, mientras que al llamar a BindToStorage se proporciona acceso al objeto de almacenamiento en el que reside la hoja de cálculo.
Notas a los autores de llamadas
Aunque ninguna de las clases de moniker COM llama a este método en sus operaciones de enlace, podría ser adecuado llamarla en la implementación de una nueva clase de moniker. Puede llamar a este método en una implementación de BindToObject que requiere información del objeto identificado por el parámetro pmkToLeft y puede obtenerlo del almacenamiento persistente del objeto sin activación. Por ejemplo, si los monikers se usan para identificar objetos que se pueden activar sin activar sus contenedores, puede resultar útil este método.Un cliente que puede leer el almacenamiento del objeto que identifica su moniker también podría llamar a este método.
Notas para los implementadores
La implementación debe localizar el almacenamiento persistente para el objeto identificado por el moniker actual y devolver el puntero de interfaz deseado. Algunos tipos de monikers representan pseudo-objetos, que son objetos que no tienen su propio almacenamiento persistente. Estos objetos componen parte del estado interno de su contenedor, por ejemplo, un rango de celdas de una hoja de cálculo. Si la clase moniker identifica este tipo de objeto, la implementación de BindToStorage debe devolver el error MK_E_NOSTORAGE.Si la estructura de BIND_OPTS del contexto de enlace especifica la marca de BINDFLAGS_JUSTTESTEXISTENCE, la implementación tiene la opción de devolver NULL en ppvObj (aunque también puede omitir la marca y realizar la operación de enlace completa).
Notas específicas de la implementación
Implementación | Notas |
---|---|
Anti-moniker | Este método devuelve E_NOTIMPL. |
Moniker de clase | Este método reenvía al BindToObject de la clase moniker. |
Moniker de archivo | Este método abre el archivo especificado por la ruta de acceso representada por el moniker y devuelve un puntero IStorage a ese archivo. El método solo admite el enlace a la interfaz IStorage ; Si se solicita IStream o ILockBytes en riid, el método devuelve E_UNSPEC y, si se solicitan otras interfaces, este método devuelve E_NOINTERFACE. A menos que pmkToLeft sea un moniker de clase, pmkToLeft debe ser NULL, como en la implementación de IMoniker::BindToObject. |
Moniker compuesto genérico | Este método llama recursivamente a BindToStorage en el componente situado más a la derecha del compuesto, pasando el resto del compuesto como parámetro pmkToLeft para esa llamada. |
Moniker de elemento | Si pmkToLeft es NULL, este método devuelve E_INVALIDARG. De lo contrario, el método llama a IMoniker::BindToObject en el parámetro pmkToLeft y solicita un puntero de interfaz IOleItemContainer . A continuación, el método llama a IOleItemContainer::GetObjectStorage para la interfaz solicitada. |
OBJREF moniker | Este método obtiene un puntero serializado a la interfaz solicitada en el almacenamiento que contiene el objeto en ejecución. Dado que el moniker OBJREF representa un objeto en ejecución, no se realiza ninguna activación. Si el objeto representado ya no se está ejecutando, BindToStorage produce un error con E_UNEXPECTED. |
Moniker de puntero | Este método consulta el puntero ajustado para la interfaz solicitada. |
Moniker de dirección URL |
La implementación del sistema de monikers url admite BindToStorage para objetos de secuencia en todas las direcciones URL y para objetos de almacenamiento en el caso de que el recurso designado sea un archivo compuesto.
Dado que el moniker de dirección URL admite el enlace asincrónico, el valor devuelto real de su BindToStorage puede variar en función de los parámetros de objeto establecidos en el contexto de enlace. Sin embargo, la semántica de la operación de enlace es idéntica, independientemente del uso sincrónico o asincrónico, como se indica a continuación:
|
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Windows 2000 Professional [solo aplicaciones de escritorio] |
Servidor mínimo compatible | Windows 2000 Server [solo aplicaciones de escritorio] |
Plataforma de destino | Windows |
Encabezado | objidl.h |