Класс CAsyncMonikerFile
Предоставляет функции для использования асинхронных моникеров в элементах управления ActiveX (ранее элементах управления OLE).
Синтаксис
class CAsyncMonikerFile : public CMonikerFile
Участники
Открытые конструкторы
Имя | Описание |
---|---|
CAsyncMonikerFile::CAsyncMonikerFile | Формирует объект CAsyncMonikerFile . |
Открытые методы
Имя | Описание |
---|---|
CAsyncMonikerFile::Close | Закрывает и освобождает все ресурсы. |
CAsyncMonikerFile::GetBinding | Извлекает указатель на асинхронную привязку передачи. |
CAsyncMonikerFile::GetFormatEtc | Извлекает формат данных в потоке. |
CAsyncMonikerFile::Open | Открывает файл асинхронно. |
Защищенные методы
Имя | Описание |
---|---|
CAsyncMonikerFile::CreateBindStatusCallback | Создает COM-объект, реализующий IBindStatusCallback . |
CAsyncMonikerFile::GetBindInfo | Вызывается системной библиотекой OLE для запроса сведений о типе создаваемой привязки. |
CAsyncMonikerFile::GetPriority | Вызывается системной библиотекой OLE, чтобы получить приоритет привязки. |
CAsyncMonikerFile::OnDataAvailable | Вызывается для предоставления данных по мере того, как клиент становится доступным во время асинхронных операций привязки. |
CAsyncMonikerFile::OnLowResource | Вызывается при низком уровне ресурсов. |
CAsyncMonikerFile::OnProgress | Вызывается для указания хода загрузки данных. |
CAsyncMonikerFile::OnStartBinding | Вызывается при запуске привязки. |
CAsyncMonikerFile::OnStopBinding | Вызывается при остановке асинхронной передачи. |
Замечания
Производный от CMonikerFile, который, в свою очередь, является производным от COleStreamFile, CAsyncMonikerFile
использует интерфейс IMoniker для асинхронного доступа к любому потоку данных, включая асинхронную загрузку файлов из URL-адреса. Файлы могут быть свойствами пути данных элементов activeX.
Асинхронные моникеры используются в основном в приложениях с поддержкой Интернета и элементах activeX для обеспечения адаптивного пользовательского интерфейса во время передачи файлов. Основным примером этого является использование CDataPathProperty для предоставления асинхронных свойств для элементов ActiveX. Объект CDataPathProperty
неоднократно получает обратный вызов для указания доступности новых данных во время длительного процесса обмена свойствами.
Дополнительные сведения об использовании асинхронных моникеров и элементов ActiveX в интернет-приложениях см. в следующих статьях:
Иерархия наследования
CAsyncMonikerFile
Требования
Заголовок: afxole.h
CAsyncMonikerFile::CAsyncMonikerFile
Формирует объект CAsyncMonikerFile
.
CAsyncMonikerFile();
Замечания
Он не создает IBindHost
интерфейс. IBindHost
используется только в том случае, если он указан в функции-члене Open
.
Описание IBindHost
интерфейса см. в пакете SDK для Windows.
CAsyncMonikerFile::Close
Вызовите эту функцию, чтобы закрыть и освободить все ресурсы.
virtual void Close();
Замечания
Можно вызывать нераскрытые или уже закрытые файлы.
CAsyncMonikerFile::CreateBindStatusCallback
Создает COM-объект, реализующий IBindStatusCallback
.
virtual IUnknown* CreateBindStatusCallback(IUnknown* pUnkControlling);
Параметры
pUnkControlling
Указатель на контролируемый неизвестный (внешний IUnknown
) или NULL, если агрегирование не используется.
Возвращаемое значение
Если pUnkControlling не имеет значения NULL, функция возвращает указатель на внутренний IUnknown
объект COM, поддерживающий IBindStatusCallback
новый объект COM. Если pUnkControlling
значение NULL, функция возвращает указатель на IUnknown
новый com-объект, поддерживающий IBindStatusCallback
.
Замечания
CAsyncMonikerFile
требует com-объекта, реализующего IBindStatusCallback
. MFC реализует такой объект и является агрегируемым. Вы можете переопределить CreateBindStatusCallback
, чтобы вернуть собственный COM-объект. Объект COM может агрегировать реализацию MFC путем вызова CreateBindStatusCallback
с помощью управляемого неизвестного объекта COM. COM-объекты, реализованные CCmdTarget
с помощью поддержки COM, могут получить управляемое неизвестное использование CCmdTarget::GetControllingUnknown
.
Кроме того, com-объект может делегировать реализацию MFC путем вызова CreateBindStatusCallback( NULL )
.
Вызовы CreateBindStatusCallback
CAsyncMonikerFile::Open.
Дополнительные сведения об асинхронных моникерах и асинхронной привязке см. в интерфейсе IBindStatusCallback и о работе асинхронной привязки и хранилища. Обсуждение агрегирования см. в разделе "Агрегирование". Все три раздела находятся в пакете SDK для Windows.
CAsyncMonikerFile::GetBindInfo
Вызывается от клиента асинхронного моникера, чтобы сообщить асинхронный моникер, как он хочет привязать.
virtual DWORD GetBindInfo() const;
Возвращаемое значение
Извлекает параметры для IBindStatusCallBack
. Описание IBindStatusCallback
интерфейса см. в пакете SDK для Windows.
Замечания
Реализация по умолчанию задает асинхронную привязку для использования носителя хранилища (потока) и использования модели отправки данных. Переопределите эту функцию, если вы хотите изменить поведение привязки.
Одной из причин этого будет привязка с помощью модели извлечения данных вместо модели отправки данных. В модели извлечения данных клиент управляет операцией привязки, а моникер предоставляет данные клиенту только при чтении. В модели отправки данных моникер управляет асинхронной операцией привязки и постоянно уведомляет клиента при наличии новых данных.
CAsyncMonikerFile::GetBinding
Вызовите эту функцию, чтобы получить указатель на асинхронную привязку передачи.
IBinding* GetBinding() const;
Возвращаемое значение
Указатель на интерфейс, предоставленный IBinding
при начале асинхронной передачи. Возвращает значение NULL, если по какой-либо причине передача не может быть выполнена асинхронно.
Замечания
Это позволяет управлять процессом передачи данных через IBinding
интерфейс, например с помощью IBinding::Abort
, IBinding::Pause
и IBinding::Resume
.
Описание IBinding
интерфейса см. в пакете SDK для Windows.
CAsyncMonikerFile::GetFormatEtc
Вызовите эту функцию, чтобы получить формат данных в потоке.
FORMATETC* GetFormatEtc() const;
Возвращаемое значение
Указатель на структуру Windows FORMATETC для текущего открытого потока. Возвращает значение NULL, если моникер не привязан, если он не является асинхронным или если асинхронная операция не началась.
CAsyncMonikerFile::GetPriority
Вызывается от клиента асинхронного моникера, так как процесс привязки начинает получать приоритет, заданный потоку для операции привязки.
virtual LONG GetPriority() const;
Возвращаемое значение
Приоритет, с которым будет проходить асинхронная передача. Один из стандартных флагов приоритета потока: THREAD_PRIORITY_ABOVE_NORMAL, THREAD_PRIORITY_BELOW_NORMAL, THREAD_PRIORITY_HIGHEST, THREAD_PRIORITY_IDLE, THREAD_PRIORITY_LOWEST, THREAD_PRIORITY_NORMAL и THREAD_PRIORITY_TIME_CRITICAL. Описание этих значений см. в функции Windows SetThreadPriority .
Замечания
GetPriority
не следует вызывать напрямую. THREAD_PRIORITY_NORMAL возвращается реализацией по умолчанию.
CAsyncMonikerFile::OnDataAvailable
Асинхронный моникер вызывает OnDataAvailable
предоставление данных клиенту по мере его доступности во время асинхронных операций привязки.
virtual void OnDataAvailable(DWORD dwSize, DWORD bscfFlag);
Параметры
dwSize
Совокупный объем данных (в байтах), доступный с начала привязки. Может быть равно нулю, указывая, что объем данных не относится к операции или что конкретный объем не стал доступен.
bscfFlag
Значение перечисления BSCF. Может быть одним или несколькими из следующих значений:
BSCF_FIRSTDATANOTIFICATION определяет первый вызов
OnDataAvailable
для данной операции привязки.BSCF_INTERMEDIATEDATANOTIFICATION определяет промежуточный вызов
OnDataAvailable
для операции привязки.BSCF_LASTDATANOTIFICATION определяет последний вызов
OnDataAvailable
для операции привязки.
Замечания
Реализация по умолчанию этой функции не выполняет никаких действий. См. следующий пример реализации.
Пример
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
Вызывается моникером, когда ресурсы низки.
virtual void OnLowResource();
Замечания
Вызовы GetBinding( )-> Abort( )
реализации по умолчанию.
CAsyncMonikerFile::OnProgress
Вызывается моникером неоднократно, чтобы указать текущий ход выполнения этой операции привязки, как правило, с разумными интервалами во время длительной операции.
virtual void OnProgress(
ULONG ulProgress,
ULONG ulProgressMax,
ULONG ulStatusCode,
LPCTSTR szStatusText);
Параметры
ulProgres
Указывает текущий ход выполнения операции привязки относительно ожидаемого максимального значения, указанного в ulProgressMax.
ulProgressMax
Указывает ожидаемое максимальное значение ulProgress для длительности вызовов OnProgress
для этой операции.
ulStatusCode
Предоставляет дополнительные сведения о ходе выполнения операции привязки. Допустимые значения взяты из BINDSTATUS
перечисления. Сведения о возможных значениях см. в примечаниях.
szStatusText
Сведения о текущем ходе выполнения в зависимости от значения ulStatusCode. Сведения о возможных значениях см. в примечаниях.
Замечания
Возможные значения ulStatusCode (и szStatusText для каждого значения):
значение | Описание |
---|---|
BINDSTATUS_FINDINGRESOURCE | Операция привязки находит ресурс, к которому привязан объект или хранилище. SzStatusText предоставляет отображаемое имя искомого ресурса (например, "www.microsoft.com"). |
BINDSTATUS_CONNECTING | Операция привязки подключается к ресурсу, к которому привязан объект или хранилище. SzStatusText предоставляет отображаемое имя подключаемого ресурса (например, IP-адрес). |
BINDSTATUS_SENDINGREQUEST | Операция привязки запрашивает объект или хранилище, к которым привязано. SzStatusText предоставляет отображаемое имя объекта (например, имя файла). |
BINDSTATUS_REDIRECTING | Операция привязки перенаправляется в другое расположение данных. SzStatusText предоставляет отображаемое имя нового расположения данных. |
BINDSTATUS_USINGCACHEDCOPY | Операция привязки извлекает запрошенный объект или хранилище из кэшированного копирования. SzStatusText имеет значение NULL. |
BINDSTATUS_BEGINDOWNLOADDATA | Операция привязки начала получать объект или хранилище, привязанные к. SzStatusText предоставляет отображаемое имя расположения данных. |
BINDSTATUS_DOWNLOADINGDATA | Операция привязки продолжает получать объект или хранилище, к которым привязано. SzStatusText предоставляет отображаемое имя расположения данных. |
BINDSTATUS_ENDDOWNLOADDATA | Операция привязки завершила получение объекта или хранилища, к которым привязано. SzStatusText предоставляет отображаемое имя расположения данных. |
BINDSTATUS_CLASSIDAVAILABLE | Экземпляр объекта, привязанного к ней, должен быть создан только после создания. SzStatusText предоставляет CLSID нового объекта в строковом формате, что позволяет клиенту отменить операцию привязки при необходимости. |
CAsyncMonikerFile::OnStartBinding
Переопределите эту функцию в производных классах для выполнения действий при запуске привязки.
virtual void OnStartBinding();
Замечания
Эта функция вызывается моникером. Реализация по умолчанию не выполняет никаких действий.
CAsyncMonikerFile::OnStopBinding
Вызывается моникером в конце операции привязки.
virtual void OnStopBinding(HRESULT hresult, LPCTSTR szError);
Параметры
hresult
HRESULT, представляющий собой значение ошибки или предупреждения.
szErrort
Символьная строка, описывающая ошибку.
Замечания
Переопределите эту функцию для выполнения действий при остановке передачи. По умолчанию функция освобождается IBinding
.
Описание IBinding
интерфейса см. в пакете SDK для Windows.
CAsyncMonikerFile::Open
Вызовите эту функцию-член, чтобы открыть файл асинхронно.
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);
Параметры
lpszURL
Указатель на файл, который необходимо открыть асинхронно. Файл может быть любым допустимым URL-адресом или именем файла.
pError
Указатель на исключения файлов. В случае ошибки будет задана причина.
pMoniker
Указатель на асинхронный моникерный интерфейс IMoniker
, точный моникер, который является сочетанием собственного моникера документа, с помощью которого можно получить и IOleClientSite::GetMoniker(OLEWHICHMK_CONTAINER)
моникер, созданный из имени пути. Элемент управления может использовать этот моникер для привязки, но это не моникер, который должен сохранить элемент управления.
pBindHost
Указатель на IBindHost
интерфейс, который будет использоваться для создания моникера из потенциально относительного имени пути. Если узел привязки недопустим или не предоставляет моникер, вызов по умолчанию используется Open(lpszFileName,pError)
. Описание IBindHost
интерфейса см. в пакете SDK для Windows.
pServiceProvider
Указатель на IServiceProvider
интерфейс. Если поставщик услуг недопустим или не предоставляет службу IBindHost
, вызов по Open(lpszFileName,pError)
умолчанию.
pUnknown
Указатель на IUnknown
интерфейс. Если IServiceProvider
найдено, функция запрашивает запросы.IBindHost
Если поставщик услуг недопустим или не предоставляет службу IBindHost
, вызов по Open(lpszFileName,pError)
умолчанию.
Возвращаемое значение
Ненулевое значение, если файл открыт успешно; в противном случае — 0.
Замечания
Этот вызов инициирует процесс привязки.
Для параметра lpszURL можно использовать URL-адрес или имя файла. Например:
CMyMoniker *pMyMoniker = new CMyMoniker();
pMyMoniker->Open(_T("http://www.microsoft.com"));
- или -
CMyMoniker *pMyMoniker = new CMyMoniker();
pMyMoniker->Open(_T("file:c:\\mydata.dat"));
См. также
Класс CMonikerFile
Диаграмма иерархии
Класс CMonikerFile
Класс CDataPathProperty