CAsyncMonikerFile Class
Provides functionality for the use of asynchronous monikers in ActiveX controls (formerly OLE controls).
Syntax
class CAsyncMonikerFile : public CMonikerFile
Members
Public Constructors
Name | Description |
---|---|
CAsyncMonikerFile::CAsyncMonikerFile | Constructs a CAsyncMonikerFile object. |
Public Methods
Name | Description |
---|---|
CAsyncMonikerFile::Close | Closes and releases all resources. |
CAsyncMonikerFile::GetBinding | Retrieves a pointer to the asynchronous transfer binding. |
CAsyncMonikerFile::GetFormatEtc | Retrieves the format of the data in the stream. |
CAsyncMonikerFile::Open | Opens a file asynchronously. |
Protected Methods
Name | Description |
---|---|
CAsyncMonikerFile::CreateBindStatusCallback | Creates a COM object that implements IBindStatusCallback . |
CAsyncMonikerFile::GetBindInfo | Called by the OLE system library to request information on the type of bind to be created. |
CAsyncMonikerFile::GetPriority | Called by the OLE system library to get the priority of the binding. |
CAsyncMonikerFile::OnDataAvailable | Called to provide data as it becomes available to the client during asynchronous bind operations. |
CAsyncMonikerFile::OnLowResource | Called when resources are low. |
CAsyncMonikerFile::OnProgress | Called to indicate progress on the data downloading process. |
CAsyncMonikerFile::OnStartBinding | Called when binding is starting up. |
CAsyncMonikerFile::OnStopBinding | Called when asynchronous transfer is stopped. |
Remarks
Derived from CMonikerFile, which in turn is derived from COleStreamFile, CAsyncMonikerFile
uses the IMoniker interface to access any data stream asynchronously, including loading files asynchronously from a URL. The files can be datapath properties of ActiveX controls.
Asynchronous monikers are used primarily in Internet-enabled applications and ActiveX controls to provide a responsive user-interface during file transfers. A prime example of this is the use of CDataPathProperty to provide asynchronous properties for ActiveX controls. The CDataPathProperty
object will repeatedly get a callback to indicate availability of new data during a lengthy property exchange process.
For more information about how to use asynchronous monikers and ActiveX controls in Internet applications, see the following articles:
Inheritance Hierarchy
CAsyncMonikerFile
Requirements
Header: afxole.h
CAsyncMonikerFile::CAsyncMonikerFile
Constructs a CAsyncMonikerFile
object.
CAsyncMonikerFile();
Remarks
It does not create the IBindHost
interface. IBindHost
is used only if you provide it in the Open
member function.
For a description of the IBindHost
interface, see the Windows SDK.
CAsyncMonikerFile::Close
Call this function to close and release all resources.
virtual void Close();
Remarks
Can be called on unopened or already closed files.
CAsyncMonikerFile::CreateBindStatusCallback
Creates a COM object that implements IBindStatusCallback
.
virtual IUnknown* CreateBindStatusCallback(IUnknown* pUnkControlling);
Parameters
pUnkControlling
A pointer to the controlling unknown (the outer IUnknown
) or NULL if aggregation is not being used.
Return Value
If pUnkControlling is not NULL, the function returns a pointer to the inner IUnknown
on a new COM object supporting IBindStatusCallback
. If pUnkControlling
is NULL, the function returns a pointer to an IUnknown
on a new COM object supporting IBindStatusCallback
.
Remarks
CAsyncMonikerFile
requires a COM object that implements IBindStatusCallback
. MFC implements such an object, and it is aggregatable. You can override CreateBindStatusCallback
to return your own COM object. Your COM object can aggregate MFC's implementation by calling CreateBindStatusCallback
with the controlling unknown of your COM object. COM objects implemented using the CCmdTarget
COM support can retrieve the controlling unknown using CCmdTarget::GetControllingUnknown
.
Alternately, your COM object can delegate to MFC's implementation by calling CreateBindStatusCallback( NULL )
.
CAsyncMonikerFile::Open calls CreateBindStatusCallback
.
For more information about asynchronous monikers and asynchronous binding, see the IBindStatusCallback interface and How Asynchronous Binding and Storage Work. For a discussion of aggregation, see Aggregation. All three topics are in the Windows SDK.
CAsyncMonikerFile::GetBindInfo
Called from the client of an asynchronous moniker to tell the asynchronous moniker how it wants to bind.
virtual DWORD GetBindInfo() const;
Return Value
Retrieves the settings for IBindStatusCallBack
. For a description of the IBindStatusCallback
interface, see the Windows SDK.
Remarks
The default implementation sets the binding to be asynchronous, to use a storage medium (a stream), and to use the data-push model. Override this function if you want to change the behavior of the binding.
One reason for doing this would be to bind using the data-pull model instead of the data-push model. In a data-pull model, the client drives the bind operation, and the moniker only provides data to the client when it is read. In a data-push model, the moniker drives the asynchronous bind operation and continuously notifies the client whenever new data is available.
CAsyncMonikerFile::GetBinding
Call this function to retrieve a pointer to the asynchronous transfer binding.
IBinding* GetBinding() const;
Return Value
A pointer to the IBinding
interface provided when asynchronous transfer begins. Returns NULL if for any reason the transfer cannot be made asynchronously.
Remarks
This allows you to control the data transfer process through the IBinding
interface, for example, with IBinding::Abort
, IBinding::Pause
, and IBinding::Resume
.
For a description of the IBinding
interface, see the Windows SDK.
CAsyncMonikerFile::GetFormatEtc
Call this function to retrieve the format of the data in the stream.
FORMATETC* GetFormatEtc() const;
Return Value
A pointer to the Windows structure FORMATETC for the currently opened stream. Returns NULL if the moniker has not been bound, if it is not asynchronous, or if the asynchronous operation has not begun.
CAsyncMonikerFile::GetPriority
Called from the client of an asynchronous moniker as the binding process starts to receive the priority given to the thread for the binding operation.
virtual LONG GetPriority() const;
Return Value
The priority at which the asynchronous transfer will take place. One of the standard thread priority flags: THREAD_PRIORITY_ABOVE_NORMAL, THREAD_PRIORITY_BELOW_NORMAL, THREAD_PRIORITY_HIGHEST, THREAD_PRIORITY_IDLE, THREAD_PRIORITY_LOWEST, THREAD_PRIORITY_NORMAL, and THREAD_PRIORITY_TIME_CRITICAL. See the Windows function SetThreadPriority for a description of these values.
Remarks
GetPriority
should not be called directly. THREAD_PRIORITY_NORMAL is returned by the default implementation.
CAsyncMonikerFile::OnDataAvailable
An asynchronous moniker calls OnDataAvailable
to provide data to the client as it becomes available, during asynchronous bind operations.
virtual void OnDataAvailable(DWORD dwSize, DWORD bscfFlag);
Parameters
dwSize
The cumulative amount (in bytes) of data available since the beginning of the binding. Can be zero, indicating that the amount of data is not relevant to the operation, or that no specific amount became available.
bscfFlag
A BSCF enumeration value. Can be one or more of the following values:
BSCF_FIRSTDATANOTIFICATION Identifies the first call to
OnDataAvailable
for a given bind operation.BSCF_INTERMEDIATEDATANOTIFICATION Identifies an intermediary call to
OnDataAvailable
for a bind operation.BSCF_LASTDATANOTIFICATION Identifies the last call to
OnDataAvailable
for a bind operation.
Remarks
The default implementation of this function does nothing. See the following example for a sample implementation.
Example
void CMyMoniker::OnDataAvailable(DWORD dwSize, DWORD bscfFlag)
{
if ((bscfFlag & BSCF_FIRSTDATANOTIFICATION) != 0)
{
m_dwReadBefore = 0;
m_strText.Empty();
}
DWORD dwArriving = dwSize - m_dwReadBefore;
if (dwArriving > 0)
{
int nLen = m_strText.GetLength();
ASSERT((DWORD)nLen == m_dwReadBefore);
LPTSTR psz = m_strText.GetBuffer(nLen + dwArriving);
Read(psz + nLen, dwArriving);
m_strText.ReleaseBuffer(nLen + dwArriving);
m_dwReadBefore = dwSize;
}
}
CAsyncMonikerFile::OnLowResource
Called by the moniker when resources are low.
virtual void OnLowResource();
Remarks
The default implementation calls GetBinding( )-> Abort( )
.
CAsyncMonikerFile::OnProgress
Called by the moniker repeatedly to indicate the current progress of this bind operation, typically at reasonable intervals during a lengthy operation.
virtual void OnProgress(
ULONG ulProgress,
ULONG ulProgressMax,
ULONG ulStatusCode,
LPCTSTR szStatusText);
Parameters
ulProgress
Indicates the current progress of the bind operation relative to the expected maximum indicated in ulProgressMax.
ulProgressMax
Indicates the expected maximum value of ulProgress for the duration of calls to OnProgress
for this operation.
ulStatusCode
Provides additional information regarding the progress of the bind operation. Valid values are taken from the BINDSTATUS
enumeration. See Remarks for possible values.
szStatusText
Information about the current progress, depending on the value of ulStatusCode. See Remarks for possible values.
Remarks
Possible values for ulStatusCode (and the szStatusText for each value) are:
Value | Description |
---|---|
BINDSTATUS_FINDINGRESOURCE | The bind operation is finding the resource that holds the object or storage being bound to. The szStatusText provides the display name of the resource being searched for (for example, "www.microsoft.com"). |
BINDSTATUS_CONNECTING | The bind operation is connecting to the resource that holds the object or storage being bound to. The szStatusText provides the display name of the resource being connected to (for example, an IP address). |
BINDSTATUS_SENDINGREQUEST | The bind operation is requesting the object or storage being bound to. The szStatusText provides the display name of the object (for example, a file name). |
BINDSTATUS_REDIRECTING | The bind operation has been redirected to a different data location. The szStatusText provides the display name of the new data location. |
BINDSTATUS_USINGCACHEDCOPY | The bind operation is retrieving the requested object or storage from a cached copy. The szStatusText is NULL. |
BINDSTATUS_BEGINDOWNLOADDATA | The bind operation has begun receiving the object or storage being bound to. The szStatusText provides the display name of the data location. |
BINDSTATUS_DOWNLOADINGDATA | The bind operation continues to receive the object or storage being bound to. The szStatusText provides the display name of the data location. |
BINDSTATUS_ENDDOWNLOADDATA | The bind operation has finished receiving the object or storage being bound to. The szStatusText provides the display name of the data location. |
BINDSTATUS_CLASSIDAVAILABLE | An instance of the object being bound to is just about to be created. The szStatusText provides the CLSID of the new object in string format, allowing the client an opportunity to cancel the bind operation, if desired. |
CAsyncMonikerFile::OnStartBinding
Override this function in your derived classes to perform actions when binding is starting up.
virtual void OnStartBinding();
Remarks
This function is called back by the moniker. The default implementation does nothing.
CAsyncMonikerFile::OnStopBinding
Called by the moniker at the end of the bind operation.
virtual void OnStopBinding(HRESULT hresult, LPCTSTR szError);
Parameters
hresult
An HRESULT that is the error or warning value.
szErrort
A character string describing the error.
Remarks
Override this function to perform actions when the transfer is stopped. By default, the function releases IBinding
.
For a description of the IBinding
interface, see the Windows SDK.
CAsyncMonikerFile::Open
Call this member function to open a file asynchronously.
virtual BOOL Open(
LPCTSTR lpszURL,
CFileException* pError = NULL);
virtual BOOL Open(
IMoniker* pMoniker,
CFileException* pError = NULL);
virtual BOOL Open(
LPCTSTR lpszURL,
IBindHost* pBindHost,
CFileException* pError = NULL);
virtual BOOL Open(
IMoniker* pMoniker,
IBindHost* pBindHost,
CFileException* pError = NULL);
virtual BOOL Open(
LPCTSTR lpszURL,
IServiceProvider* pServiceProvider,
CFileException* pError = NULL);
virtual BOOL Open(
IMoniker* pMoniker,
IServiceProvider* pServiceProvider,
CFileException* pError = NULL);
virtual BOOL Open(
LPCTSTR lpszURL,
IUnknown* pUnknown,
CFileException* pError = NULL);
virtual BOOL Open(
IMoniker* pMoniker,
IUnknown* pUnknown,
CFileException* pError = NULL);
Parameters
lpszURL
A pointer to file to be opened asynchronously. The file can be any valid URL or filename.
pError
A pointer to the file exceptions. In the event of an error, it will be set to the cause.
pMoniker
A pointer to the asynchronous moniker interface IMoniker
, a precise moniker that is the combination of the document's own moniker, which you can retrieve with IOleClientSite::GetMoniker(OLEWHICHMK_CONTAINER)
, and a moniker created from the path name. The control can use this moniker to bind, but this is not the moniker the control should save.
pBindHost
A pointer to the IBindHost
interface that will be used to create the moniker from a potentially relative pathname. If the bind host is invalid or does not provide a moniker, the call defaults to Open(lpszFileName,pError)
. For a description of the IBindHost
interface, see the Windows SDK.
pServiceProvider
A pointer to the IServiceProvider
interface. If the service provider is invalid or fails to provide the service for IBindHost
, the call defaults to Open(lpszFileName,pError)
.
pUnknown
A pointer to the IUnknown
interface. If IServiceProvider
is found, the function queries for IBindHost
. If the service provider is invalid or fails to provide the service for IBindHost
, the call defaults to Open(lpszFileName,pError)
.
Return Value
Nonzero if the file is opened successfully; otherwise 0.
Remarks
This call initiates the binding process.
You can use a URL or a filename for the lpszURL parameter. For example:
CMyMoniker *pMyMoniker = new CMyMoniker();
pMyMoniker->Open(_T("http://www.microsoft.com"));
- or -
CMyMoniker *pMyMoniker = new CMyMoniker();
pMyMoniker->Open(_T("file:c:\\mydata.dat"));
See also
CMonikerFile Class
Hierarchy Chart
CMonikerFile Class
CDataPathProperty Class