Поделиться через


Класс 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 в интернет-приложениях см. в следующих статьях:

Иерархия наследования

CObject

CFile

COleStreamFile

CMonikerFile

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 ).

Вызовы CreateBindStatusCallbackCAsyncMonikerFile::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. Сведения о возможных значениях см. в примечаниях.

Замечания

Возможные значения ulStatusCodeszStatusText для каждого значения):

значение Описание
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