Класс 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
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);
Параметры
точка
[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;
Замечания
Инициализирован из OnDataAvailable
STGMEDIUM
структуры, когда флаг 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_spBinding IBinding
указатель в 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);
Параметры
точка
[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!!!"));
}
}
}