Important:
This is retired content. This content is outdated and is no longer being maintained. It is provided as a courtesy for individuals who are still using these technologies. This content may contain URLs that were valid when originally published, but now link to sites or pages that no longer exist.
A version of this page is also available for
4/8/2010

This method binds to the object's storage.

Syntax

HRESULT BindToStorage( 
  IBindCtx* 
pbc, 
  IMoniker* 
pmkToLeft, 
  REFIID 
riid, 
  void** 
ppvObj
);

Parameters

pbc

[in] Pointer to the IBindCtxinterface on the bind context object to be used during this binding operation. The bind context caches objects bound during the binding process, contains parameters that apply to all operations using the bind context, and provides the means by which the moniker implementation should retrieve information about its environment. For more information, see IBindCtx.

pmkToLeft

[in] If the moniker is part of a composite moniker, pointer to the moniker to the left of this moniker. This parameter is primarily used by moniker implementers to enable cooperation between the various components of a composite moniker. Moniker clients should pass NULL.

riid

[in] Reference to the identifier of the storage interface requested, whose pointer will be returned in ppvObj. Storage interfaces commonly requested include IStorage, IStream, and ILockBytes.

ppvObj

[out] Address of the pointer variable that receives the interface pointer requested in riid. Upon successful return, * ppvObjcontains the requested interface pointer to the storage of the object identified by the moniker.

If ppvObjis non-NULL, the implementation must call the IUnknown::AddRefmethod on the storage; it is the caller's responsibility to call the IUnknown::Releasemethod.

If an error occurs, * ppvObjmust be set to NULL.

Return Value

The method supports the standard return value E_OUTOFMEMORY. The following table shows the additional return values for this method.

Value Description

S_OK

The binding operation was successful.

MK_E_NOSTORAGE

The object identified by this moniker does not have its own storage.

MK_E_EXCEEDEDDEADLINE

The operation could not be completed within the time limit specified by the bind context's BIND_OPTSstructure.

MK_E_CONNECTMANUALLY

The operation was unable to connect to the storage, possibly because a network device could not be connected. For more information, see IMoniker::BindToObject.

MK_E_INTERMEDIATEINTERFACENOTSUPPORTED

An intermediate object was found but it did not support an interface required for an operation.

For example, an item moniker returns this value if its container does not support the IOleItemContainerinterface.

STG_E_ACCESSDENIED

Unable to access the storage object.

IOleItemContainer::GetObjecterrors

Binding to a moniker that contains an item moniker can return any of the errors associated with this function

Remarks

There is an important difference between the IMoniker::BindToObjectand IMoniker::BindToStoragemethods.

If, for example, you have a moniker that identifies a spreadsheet object, calling IMoniker::BindToObjectprovides access to the spreadsheet object itself, while calling IMoniker::BindToStorageprovides access to the storage object in which the spreadsheet resides.

To determine whether the platform supports this interface, see Determining Supported COM APIs.

Notes to Callers

Although none of the COM moniker classes call this method in their binding operations, it might be appropriate to call it in the implementation of a new moniker class.

You could call this method in an implementation of IMoniker::BindToObjectthat requires information from the object identified by the pmkToLeftparameter and can get it from the persistent storage of the object without activation.

For example, if your monikers are used to identify objects that can be activated without activating their containers, you may find this method useful.

A client that can read the storage of the object its moniker identifies could also call this method.

Notes to Implementers

Your implementation should locate the persistent storage for the object identified by the current moniker and return the desired interface pointer.

Some types of monikers represent pseudo-objects, which are objects that do not have their own persistent storage. Such objects include some portion of the internal state of its container; as, for example, a range of cells in a spreadsheet.

If your moniker class identifies this type of object, your implementation of IMoniker::BindToStorageshould return the error MK_E_NOSTORAGE.

If the bind context's BIND_OPTSstructure specifies the BINDFLAGS_JUSTTESTEXISTENCE flag, your implementation has the option of returning NULL in ppvObj(although it can also ignore the flag and perform the complete binding operation).

Requirements

Header objidl.h, objidl.idl
Library ole32.lib, uuid.lib
Windows Embedded CE Windows CE 2.0 and later
Windows Mobile Windows Mobile Version 5.0 and later

See Also