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


Класс CBindStatusCallback

Этот класс реализует интерфейс IBindStatusCallback.

Важно!

Этот класс и его члены нельзя использовать в приложениях, выполняемых в среде выполнения Windows.

Синтаксис

template <class T,
    int nBindFlags = BINDF_ASYNCHRONOUS | BINDF_ASYNCSTORAGE | BINDF_GETNEWESTVERSION | BINDF_NOWRITECACHE>
class ATL_NO_VTABLE CBindStatusCallback : public CComObjectRootEx <T ::_ThreadModel::ThreadModelNoCS>,
    public IBindStatusCallbackImpl<T>

Параметры

T
Класс, содержащий функцию, которая будет вызываться по мере получения данных.

nBindFlags
Указывает флаги привязки, возвращаемые GetBindInfo. Реализация по умолчанию задает асинхронную привязку, извлекает последнюю версию данных или объекта и не сохраняет извлеченные данные в кэше дисков.

Участники

Открытые конструкторы

Имя Описание
CBindStatusCallback::CBindStatusCallback Конструктор.
CBindStatusCallback::~CBindStatusCallback Деструктор

Открытые методы

Имя Описание
CBindStatusCallback::D ownload Статический метод, запускающий процесс скачивания, создает CBindStatusCallback объект и вызовы StartAsyncDownload.
CBindStatusCallback::GetBindInfo Вызывается асинхронным моникером для запроса сведений о типе создаваемой привязки.
CBindStatusCallback::GetPriority Вызывается асинхронным моникером, чтобы получить приоритет операции привязки. Возвращается E_NOTIMPLреализация ATL.
CBindStatusCallback::OnDataAvailable Вызывается для предоставления данных приложению по мере его доступности. Считывает данные, а затем вызывает функцию, переданную ему для использования данных.
CBindStatusCallback::OnLowResource Вызывается при низком уровне ресурсов. Реализация ATL возвращает S_OK.
CBindStatusCallback::OnObjectAvailable Вызывается асинхронным моникером для передачи указателя интерфейса объекта приложению. Реализация ATL возвращает S_OK.
CBindStatusCallback::OnProgress Вызывается для указания хода выполнения процесса скачивания данных. Реализация ATL возвращает S_OK.
CBindStatusCallback::OnStartBinding Вызывается при запуске привязки.
CBindStatusCallback::OnStopBinding Вызывается при остановке асинхронной передачи данных.
CBindStatusCallback::StartAsyncDownload Инициализирует доступные байты и байты считываются до нуля, создает объект потока push-типа из URL-адреса и вызывает OnDataAvailable каждый раз, когда данные доступны.

Открытые члены данных

Имя Описание
CBindStatusCallback::m_dwAvailableToRead Количество байтов, доступных для чтения.
CBindStatusCallback::m_dwTotalRead Общее число операций чтения байтов.
CBindStatusCallback::m_pFunc Указатель на функцию, вызываемую при наличии данных.
CBindStatusCallback::m_pT Указатель на объект, запрашивающий асинхронную передачу данных.
CBindStatusCallback::m_spBindCtx Указатель на интерфейс IBindCtx для текущей операции привязки.
CBindStatusCallback::m_spBinding Указатель на IBinding интерфейс для текущей операции привязки.
CBindStatusCallback::m_spMoniker Указатель на интерфейс IMoniker для используемого URL-адреса.
CBindStatusCallback::m_spStream Указатель на интерфейс IStream для передачи данных.

Замечания

Класс CBindStatusCallback реализует интерфейс IBindStatusCallback. IBindStatusCallback необходимо реализовать приложением, чтобы оно получите уведомления от асинхронной передачи данных. Асинхронный моникер, предоставляемый системой, использует IBindStatusCallback методы для отправки и получения сведений об асинхронном передаче данных в объект и из нее.

Как правило, CBindStatusCallback объект связан с определенной операцией привязки. Например, в примере ASYNC при установке свойства URL-адреса он создает CBindStatusCallback объект в вызове Download:

STDMETHOD(put_URL)(BSTR newVal)
{
   HRESULT hResult = E_UNEXPECTED;

   ATLTRACE(_T("IATLAsync::put_URL\n"));
   m_bstrURL = newVal;

   if (::IsWindow(m_EditCtrl.m_hWnd))
   {
      ::SendMessage(m_EditCtrl.m_hWnd, WM_SETTEXT, 0,  (LPARAM)_T(""));
      hResult = CBindStatusCallback<CATLAsync>::Download(this, &CATLAsync::OnData, 
         m_bstrURL, m_spClientSite, FALSE);
   }

   return hResult;
}

Асинхронный моникер использует функцию OnData обратного вызова для вызова приложения при получении данных. Асинхронный моникер предоставляется системой.

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

CComObjectRootBase

IBindStatusCallback

CComObjectRootEx

CBindStatusCallback

Требования

Header: atlctl.h

CBindStatusCallback::CBindStatusCallback

Конструктор.

CBindStatusCallback();

Замечания

Создает объект для получения уведомлений об асинхронной передаче данных. Как правило, для каждой операции привязки создается один объект.

Конструктор также инициализирует m_pT и m_pFunc значение NULL.

CBindStatusCallback::~CBindStatusCallback

Деструктор

~CBindStatusCallback();

Замечания

Освобождает все выделенные ресурсы.

CBindStatusCallback::D ownload

CBindStatusCallback Создает объект и вызовы StartAsyncDownload для асинхронного скачивания данных из указанного URL-адреса.

static HRESULT Download(
    T* pT,
    ATL_PDATAAVAILABLE pFunc,
    BSTR bstrURL,
    IUnknown* pUnkContainer = NULL,
    BOOL bRelative = FALSE);

Параметры

Pt
[in] Указатель на объект, запрашивающий асинхронную передачу данных. Объект CBindStatusCallback шаблонизируется в классе этого объекта.

pFunc
[in] Указатель на функцию, которая получает данные, считываемые. Функция является членом класса объекта типа T. Пример см. в разделе StartAsyncDownload для синтаксиса и примера.

bstrURL
[in] URL-адрес для получения данных. Может быть любым допустимым URL-адресом или именем файла. Не может быть NULL. Например:

CComBSTR mybstr =_T("http://somesite/data.htm")

pUnkContainer
[in] Контейнер IUnknown . ЗНАЧЕНИЕ NULL по умолчанию.

bRelative
[in] Флаг, указывающий, является ли URL-адрес относительным или абсолютным. ЗНАЧЕНИЕ FALSE по умолчанию означает, что URL-адрес является абсолютным.

Возвращаемое значение

Одно из стандартных значений HRESULT.

Замечания

Каждый раз, когда данные передаются объекту.OnDataAvailable OnDataAvailable считывает данные и вызывает функцию, на которую указывает pFunc (например, для хранения данных или печати на экране).

CBindStatusCallback::GetBindInfo

Вызывается, чтобы рассказать моникеру, как привязать.

STDMETHOD(GetBindInfo)(
    DWORD* pgrfBSCF,
    BINDINFO* pbindinfo);

Параметры

pgrfBSCF
[out] Указатель на значения перечисления BINDF, указывающий, как должна выполняться операция привязки. По умолчанию задайте следующие значения перечисления:

BINDF_ASYNCHRONOUS асинхронное скачивание.

OnDataAvailable BINDF_ASYNCSTORAGE возвращает E_PENDING, если данные еще недоступны, а не блокируются до тех пор, пока данные не будут доступны.

BINDF_GETNEWESTVERSION Операция привязки должна получить последнюю версию данных.

BINDF_NOWRITECACHE Операция привязки не должна хранить полученные данные в кэше дисков.

pbindinfo
[in, out] Указатель на BINDINFO структуру, предоставляющую дополнительные сведения о том, как объект хочет выполнить привязку.

Возвращаемое значение

Одно из стандартных значений HRESULT.

Замечания

Реализация по умолчанию задает асинхронную привязку и использовать модель отправки данных. В модели отправки данных моникер управляет асинхронной операцией привязки и постоянно уведомляет клиента всякий раз, когда новые данные доступны.

CBindStatusCallback::GetPriority

Вызывается асинхронным моникером, чтобы получить приоритет операции привязки.

STDMETHOD(GetPriority)(LONG* pnPriority);

Параметры

pnPriority
[out] Адрес переменной LONG , которая при успешном выполнении получает приоритет.

Возвращаемое значение

Возвращает E_NOTIMPL.

CBindStatusCallback::m_dwAvailableToRead

Можно использовать для хранения количества доступных для чтения байтов.

DWORD m_dwAvailableToRead;

Замечания

Инициализировано до нуля StartAsyncDownloadв .

CBindStatusCallback::m_dwTotalRead

Совокупный общий объем байтов, считываемых в асинхронной передаче данных.

DWORD m_dwTotalRead;

Замечания

Увеличивается каждый раз, когда OnDataAvailable вызывается число байтов, фактически считываемых. Инициализировано до нуля StartAsyncDownloadв .

CBindStatusCallback::m_pFunc

Функция, на которую указывает m_pFunc функция, вызывается OnDataAvailable после того, как она считывает доступные данные (например, для хранения данных или печати на экране).

ATL_PDATAAVAILABLE m_pFunc;

Замечания

Функция, на которую указывает m_pFunc объект, является членом класса объекта и имеет следующий синтаксис:

void Function_Name(
   CBindStatusCallback<T>* pbsc,
   BYTE* pBytes,
   DWORD dwSize
   );

CBindStatusCallback::m_pT

Указатель на объект, запрашивающий асинхронную передачу данных.

T* m_pT;

Замечания

Объект CBindStatusCallback шаблонизируется в классе этого объекта.

CBindStatusCallback::m_spBindCtx

Указатель на интерфейс IBindCtx , предоставляющий доступ к контексту привязки (объект, который хранит сведения о определенной операции привязки моникера).

CComPtr<IBindCtx> m_spBindCtx;

Замечания

Инициализировано в StartAsyncDownload.

CBindStatusCallback::m_spBinding

Указатель на IBinding интерфейс текущей операции привязки.

CComPtr<IBinding> m_spBinding;

Замечания

Инициализировано в OnStartBinding и выпущено в OnStopBinding.

CBindStatusCallback::m_spMoniker

Указатель на интерфейс IMoniker для используемого URL-адреса.

CComPtr<IMoniker> m_spMoniker;

Замечания

Инициализировано в StartAsyncDownload.

CBindStatusCallback::m_spStream

Указатель на интерфейс IStream текущей операции привязки.

CComPtr<IStream> m_spStream;

Замечания

Инициализирован из OnDataAvailableSTGMEDIUM структуры, когда флаг BCSF BCSF_FIRSTDATANOTIFICATION и освобождается при BCSF_LASTDATANOTIFICATION флага BCSF.

CBindStatusCallback::OnDataAvailable

Системные асинхронные вызовы OnDataAvailable моникера для предоставления данных объекту по мере его доступности.

STDMETHOD(
    OnDataAvailable)(DWORD grfBSCF,
    DWORD dwSize,
    FORMATETC* /* pformatetc */,
    STGMEDIUM* pstgmed);

Параметры

grfBSCF
[in] Значение перечисления BSCF. Одно или несколько из следующих: BSCF_FIRSTDATANOTIFICATION, BSCF_INTERMEDIARYDATANOTIFICATION или BSCF_LASTDATANOTIFICATION.

dwSize
[in] Совокупный объем данных (в байтах), доступный с начала привязки. Может быть равно нулю, указывая, что объем данных не имеет значения или какой-либо конкретный объем не стал доступен.

pformatetc
[in] Указатель на структуру FORMATETC , содержащую формат доступных данных. Если формат отсутствует, можно CF_NULL.

pstgmed
[in] Указатель на структуру STGMEDIUM , содержащую фактические данные, доступные.

Возвращаемое значение

Одно из стандартных значений HRESULT.

Замечания

OnDataAvailable считывает данные, а затем вызывает метод класса объекта (например, для хранения данных или печати на экране). Дополнительные сведения см. в разделе CBindStatusCallback::StartAsyncDownload .

CBindStatusCallback::OnLowResource

Вызывается при низком уровне ресурсов.

STDMETHOD(OnLowResource)(DWORD /* dwReserved */);

Параметры

dwReserved
Зарезервировано.

Возвращаемое значение

Возвращает S_OK.

CBindStatusCallback::OnObjectAvailable

Вызывается асинхронным моникером для передачи указателя интерфейса объекта приложению.

STDMETHOD(OnObjectAvailable)(REFID /* riid */, IUnknown* /* punk */);

Параметры

riid
Идентификатор интерфейса запрошенного интерфейса. Не используется.

Панк
Адрес интерфейса IUnknown. Не используется.

Возвращаемое значение

Возвращает S_OK.

CBindStatusCallback::OnProgress

Вызывается для указания хода выполнения процесса скачивания данных.

STDMETHOD(OnProgress)(
    ULONG /* ulProgress */,
    ULONG /* ulProgressMax */,
    ULONG /* ulStatusCode */,
    LPCWSTRONG /* szStatusText */);

Параметры

ulProgres
Целое число без знака. Не используется.

ulProgressMax
Без знака длинное целое число unused.

ulStatusCode
Целое число без знака. Не используется.

szStatusText
Адрес строкового значения. Не используется.

Возвращаемое значение

Возвращает S_OK.

CBindStatusCallback::OnStartBinding

Задает элемент данных m_spBindingIBinding указатель в pBinding.

STDMETHOD(OnStartBinding)(DWORD /* dwReserved */, IBinding* pBinding);

Параметры

dwReserved
Зарезервировано для последующего использования.

pBinding
[in] Адрес интерфейса IBinding текущей операции привязки. Это значение не может иметь значение NULL. Клиент должен вызвать AddRef на этом указателе, чтобы сохранить ссылку на объект привязки.

CBindStatusCallback::OnStopBinding

IBinding Освобождает указатель в элементе данных m_spBinding.

STDMETHOD(OnStopBinding)(HRESULT hresult, LPCWSTR /* szError */);

Параметры

hresult
Код состояния, возвращенный из операции привязки.

szError
Адрес строкового значения. Не используется.

Замечания

Вызывается асинхронным моникером, предоставленным системой, чтобы указать конец операции привязки.

CBindStatusCallback::StartAsyncDownload

Начинает асинхронно загружать данные из указанного URL-адреса.

HRESULT StartAsyncDownload(
    T* pT,
    ATL_PDATAAVAILABLE pFunc,
    BSTR bstrURL,
    IUnknown* pUnkContainer = NULL,
    BOOL bRelative = FALSE);

Параметры

Pt
[in] Указатель на объект, запрашивающий асинхронную передачу данных. Объект CBindStatusCallback шаблонизируется в классе этого объекта.

pFunc
[in] Указатель на функцию, которая получает данные для чтения. Функция является членом класса объекта типа T. См . примечания для синтаксиса и примера.

bstrURL
[in] URL-адрес для получения данных. Может быть любым допустимым URL-адресом или именем файла. Не может быть NULL. Например:

CComBSTR mybstr =_T("http://somesite/data.htm")

pUnkContainer
[in] Контейнер IUnknown . ЗНАЧЕНИЕ NULL по умолчанию.

bRelative
[in] Флаг, указывающий, является ли URL-адрес относительным или абсолютным. ЗНАЧЕНИЕ FALSE по умолчанию означает, что URL-адрес является абсолютным.

Возвращаемое значение

Одно из стандартных значений HRESULT.

Замечания

Каждый раз, когда данные передаются объекту.OnDataAvailable OnDataAvailable считывает данные и вызывает функцию, на которую указывает pFunc (например, для хранения данных или печати на экране).

Функция, на которую указывает pFunc , является членом класса объекта и имеет следующий синтаксис:

void Function_Name(
    CBindStatusCallback<T>* pbsc,
    BYTE* pBytes,
    DWORD dwSize);

В следующем примере (взятом из примера ASYNC ) функция OnData записывает полученные данные в текстовое поле.

Пример

void OnData(CBindStatusCallback<CATLAsync>* , BYTE* pBytes, DWORD /*cBytes*/)
{
   ATLTRACE(_T("OnData called\n"));

   m_bstrText.Append((LPCSTR)pBytes);
   if (::IsWindow(m_EditCtrl.m_hWnd))
   {
      USES_CONVERSION;
      _ATLTRY {
         ::SendMessage(m_EditCtrl.m_hWnd, WM_SETTEXT, 0, 
            (LPARAM)(LPCTSTR)COLE2CT((BSTR)m_bstrText));
      }
      _ATLCATCH( e ) {
         e; // unused
         // COLE2CT threw an exception!
         ::SendMessage(m_EditCtrl.m_hWnd, WM_SETTEXT, 0, 
            (LPARAM)_T("Could not allocate enough memory!!!"));
      }
   }
}

См. также

Общие сведения о классе