# IBindStatusCallback::OnDataAvailable

An asynchronous moniker calls this method to provide data to the client as it becomes available during asynchronous bind operations.

HRESULT OnDataAvailable(

DWORD grfBSCF, | //BSCF enumeration values
DWORD dwSize, | //Length of data in bytes available from current bind operation
FORMATETC *pfmtetc, | //Pointer to FORMATETC structure
STGMEDIUM *pstgmed | //Pointer to STGMEDIUM structure
); |

Parameters

grfBSCF
  [in] DWORD value taken from the BSCF enumeration indicating the kind of data available.
dwSize
  [in] Size in bytes of total data available from the current bind operation.
pfmtetc
  [in] Pointer to the FORMATETC structure that indicates the format of the available data. This parameter is used when the bind operation is a result of IMoniker::BindToStorage. If there is no format associated with the available data, pfmtetc may contain CF_NULL. Each different call to OnDataAvailable may pass in a new value for this parameter, although they all should always point to the same data.
pstgmed
  [in] Pointer to the STGMEDIUM structure that holds the actual data that is now available. This parameter is used when called as a result of IMoniker::BindToStorage. Each different call to OnDataAvailable will pass in a new value for this parameter, and clients should use each new value as it is available. If the client wishes to keep the data in pstgmed alive, the client should call AddRef on pstgmed->pUnkForRelease (if the pointer is non-NULL) and eventually use the ReleaseStgMedium function to release the storage. Note that pstgmed->pUnkForRelease may be NULL indicating that the storage medium cannot be kept alive. For example, this will be the case when using URL monikers to download data that is not being cached.

Return Values

S_OK
  The operation was successful.
E_INVALIDARG
  One or more parameters are invalid.

Remarks

During asynchronous IMoniker::BindToStorage bind operations, an asynchronous moniker calls this method to provide data to the client as it becomes available.

Note that the behavior of the storage returned in pstgmed depends on the BINDF flags returned in IBindStatusCallback::GetBindInfo. This storage can be asynchronous or blocking, and the bind operation can follow a data pull model or a data push model.. Furthermore, it is important to note that for BINDF_PULLDATA bind operations, it is not possible to seek backwards into data streams provided in IBindStatusCallback::OnDataAvailable. On the other hand, for data push model bind operations, it is commonly possible to seek back into a data stream and read any data that has been downloaded for an ongoing IMoniker::BindToStorage operation.

See Also

BINDF, BSCF, IBindStatusCallback::GetBindInfo, IBindStatusCallback::OnDataAvailable