Clase CBindStatusCallback
Esta clase implementa la interfaz IBindStatusCallback
.
Importante
Esta clase y sus miembros no se pueden usar en las aplicaciones que se ejecutan en Windows Runtime.
Sintaxis
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>
Parámetros
T
La clase que contiene la función a la que se llamará a medida que se reciben los datos.
nBindFlags
Especifica las marcas de enlace devueltas por GetBindInfo. La implementación predeterminada establece que el enlace sea asincrónico, recupera la versión más reciente del objeto o datos y no almacena los datos recuperados en la memoria caché de disco.
Miembros
Constructores públicos
Nombre | Descripción |
---|---|
CBindStatusCallback::CBindStatusCallback | Constructor . |
CBindStatusCallback::~CBindStatusCallback | El destructor . |
Métodos públicos
Nombre | Descripción |
---|---|
CBindStatusCallback::Download | Método estático que inicia el proceso de descarga, crea un objeto CBindStatusCallback y llama a StartAsyncDownload . |
CBindStatusCallback::GetBindInfo | Llamado por el moniker asincrónico para solicitar información sobre el tipo de enlace que se va a crear. |
CBindStatusCallback::GetPriority | Llamado por el moniker asincrónico para obtener la prioridad de la operación de enlace. La implementación ATL devuelve E_NOTIMPL . |
CBindStatusCallback::OnDataAvailable | Se llama para proporcionar datos a la aplicación a medida que están disponibles. Lee los datos y, después, llama a la función que se le ha pasado para usar los datos. |
CBindStatusCallback::OnLowResource | Se llama cuando los recursos son bajos. La implementación ATL devuelve S_OK. |
CBindStatusCallback::OnObjectAvailable | Llamado por el moniker asincrónico para pasar un puntero de interfaz de objeto a la aplicación. La implementación ATL devuelve S_OK. |
CBindStatusCallback::OnProgress | Se llama para indicar el progreso de un proceso de descarga de datos. La implementación ATL devuelve S_OK. |
CBindStatusCallback::OnStartBinding | Se llama cuando comienza el enlace. |
CBindStatusCallback::OnStopBinding | Se llama cuando se detiene la transferencia de datos asincrónica. |
CBindStatusCallback::StartAsyncDownload | Inicializa los bytes disponibles y bytes leídos en cero, crea un objeto de secuencia de tipo inserción a partir de una dirección URL y llama a OnDataAvailable cada vez que hay datos disponibles. |
Miembros de datos públicos
Nombre | Descripción |
---|---|
CBindStatusCallback::m_dwAvailableToRead | Número de bytes disponible para lectura. |
CBindStatusCallback::m_dwTotalRead | Número total de bytes leídos. |
CBindStatusCallback::m_pFunc | Puntero a la función a la que se llama cuando los datos están disponibles. |
CBindStatusCallback::m_pT | Puntero al objeto que solicita la transferencia de datos asincrónica. |
CBindStatusCallback::m_spBindCtx | Puntero a la interfaz IBindCtx para la operación de enlace actual. |
CBindStatusCallback::m_spBinding | Puntero a la interfaz IBinding para la operación de enlace actual. |
CBindStatusCallback::m_spMoniker | Puntero a la interfaz IMoniker para la dirección URL que se va a usar. |
CBindStatusCallback::m_spStream | Puntero a la interfaz IStream para la transferencia de datos. |
Comentarios
La clase CBindStatusCallback
implementa la interfaz IBindStatusCallback
. La aplicación debe implementar IBindStatusCallback
para que pueda recibir notificaciones de una transferencia de datos asincrónica. El moniker asincrónico proporcionado por el sistema usa métodos IBindStatusCallback
para enviar y recibir información sobre la transferencia de datos asincrónica hacia y desde el objeto.
Normalmente, el objeto CBindStatusCallback
está asociado a una operación de enlace específica. Por ejemplo, en el ejemplo ASYNC, al establecer la propiedad URL, crea un objeto CBindStatusCallback
en la llamada a 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;
}
El moniker asincrónico usa la función de devolución de llamada OnData
para llamar a la aplicación cuando tiene datos. El sistema proporciona el moniker asincrónico.
Jerarquía de herencia
CComObjectRootBase
IBindStatusCallback
CBindStatusCallback
Requisitos
Encabezado: atlctl.h
CBindStatusCallback::CBindStatusCallback
Constructor .
CBindStatusCallback();
Comentarios
Crea un objeto para recibir notificaciones relativas a la transferencia de datos asincrónica. Normalmente, se crea un objeto para cada operación de enlace.
El constructor también inicializa m_pT y m_pFunc en NULL.
CBindStatusCallback::~CBindStatusCallback
El destructor .
~CBindStatusCallback();
Comentarios
Libera todos los recursos asignados.
CBindStatusCallback::Download
Crea un objeto CBindStatusCallback
y llama a StartAsyncDownload
para empezar a descargar datos de forma asincrónica desde la dirección URL especificada.
static HRESULT Download(
T* pT,
ATL_PDATAAVAILABLE pFunc,
BSTR bstrURL,
IUnknown* pUnkContainer = NULL,
BOOL bRelative = FALSE);
Parámetros
pT
[in] Puntero al objeto que solicita la transferencia de datos asincrónica. El objeto CBindStatusCallback
se templaliza en la clase de este objeto.
pFunc
[in] Puntero a la función que recibe los datos leídos. La función es miembro de la clase de tipo T
del objeto. Consulte StartAsyncDownload para ver la sintaxis y un ejemplo.
bstrURL
[in] Dirección URL de la que se van a obtener datos. Puede ser cualquier dirección URL o nombre de archivo válido. No puede ser NULL. Por ejemplo:
CComBSTR mybstr =_T("http://somesite/data.htm")
pUnkContainer
[in] IUnknown
del contenedor. NULL de forma predeterminada.
bRelative
[in] Marca que indica si la dirección URL es relativa o absoluta. FALSE de forma predeterminada, lo que significa que la dirección URL es absoluta.
Valor devuelto
Uno de los valores HRESULT estándar.
Comentarios
Cada vez que los datos están disponibles, se envían al objeto a través de OnDataAvailable
. OnDataAvailable
lee los datos y llama a la función a la que apunta pFunc (por ejemplo, para almacenar los datos o imprimirlos en la pantalla).
CBindStatusCallback::GetBindInfo
Se llama para indicar al moniker cómo enlazar.
STDMETHOD(GetBindInfo)(
DWORD* pgrfBSCF,
BINDINFO* pbindinfo);
Parámetros
pgrfBSCF
[out] Puntero a los valores de enumeración BINDF que indican cómo debe producirse la operación de enlace. De forma predeterminada, establezca los siguientes valores de enumeración:
BINDF_ASYNCHRONOUS Descarga asincrónica.
BINDF_ASYNCSTORAGE OnDataAvailable
devuelve E_PENDING cuando los datos aún no están disponibles en lugar de bloquearse hasta que lo estén.
BINDF_GETNEWESTVERSION La operación de enlace debe recuperar la versión más reciente de los datos.
BINDF_NOWRITECACHE La operación de enlace no debe almacenar datos recuperados en la memoria caché del disco.
pbindinfo
[in, out] Puntero a la estructura BINDINFO
que proporciona más información sobre cómo el objeto quiere que se produzca el enlace.
Valor devuelto
Uno de los valores HRESULT estándar.
Comentarios
La implementación predeterminada establece que el enlace sea asincrónico y que use el modelo de inserción de datos. En el modelo de inserción de datos, el moniker controla la operación de enlace asincrónica y notifica al cliente de forma continua cada vez que hay nuevos datos disponibles.
CBindStatusCallback::GetPriority
Llamado por el moniker asincrónico para obtener la prioridad de la operación de enlace.
STDMETHOD(GetPriority)(LONG* pnPriority);
Parámetros
pnPriority
[out] Dirección de la variable LONG que, si se ejecuta correctamente, recibe prioridad.
Valor devuelto
Devuelve E_NOTIMPL.
CBindStatusCallback::m_dwAvailableToRead
Se puede usar para almacenar el número de bytes disponibles para lectura.
DWORD m_dwAvailableToRead;
Comentarios
Inicializado en cero en StartAsyncDownload
.
CBindStatusCallback::m_dwTotalRead
El total acumulado de bytes leídos en la transferencia de datos asincrónica.
DWORD m_dwTotalRead;
Comentarios
Se incrementa cada vez que se llama a OnDataAvailable
por el número de bytes leídos en realidad. Inicializado en cero en StartAsyncDownload
.
CBindStatusCallback::m_pFunc
Después de leer los datos disponibles, OnDataAvailable
llama a la función a la que apuntaba m_pFunc
(por ejemplo, para almacenar los datos o imprimirlos en la pantalla).
ATL_PDATAAVAILABLE m_pFunc;
Comentarios
La función a la que apunta m_pFunc
es miembro de la clase del objeto y tiene la siguiente sintaxis:
void Function_Name(
CBindStatusCallback<T>* pbsc,
BYTE* pBytes,
DWORD dwSize
);
CBindStatusCallback::m_pT
Puntero al objeto que solicita la transferencia de datos asincrónica.
T* m_pT;
Comentarios
El objeto CBindStatusCallback
se templaliza en la clase de este objeto.
CBindStatusCallback::m_spBindCtx
Puntero a una interfaz IBindCtx que proporciona acceso al contexto de enlace (un objeto que almacena información sobre una operación de enlace de moniker determinada).
CComPtr<IBindCtx> m_spBindCtx;
Comentarios
Inicializado en StartAsyncDownload
.
CBindStatusCallback::m_spBinding
Puntero a la interfaz IBinding
para la operación de enlace actual.
CComPtr<IBinding> m_spBinding;
Comentarios
Inicializado en OnStartBinding
y publicado en OnStopBinding
.
CBindStatusCallback::m_spMoniker
Puntero a la interfaz IMoniker para la dirección URL que se va a usar.
CComPtr<IMoniker> m_spMoniker;
Comentarios
Inicializado en StartAsyncDownload
.
CBindStatusCallback::m_spStream
Puntero a la interfaz IStream para la operación de enlace actual.
CComPtr<IStream> m_spStream;
Comentarios
Se inicializa en OnDataAvailable
desde la estructura STGMEDIUM
cuando la marca BCSF es BCSF_FIRSTDATANOTIFICATION y se publica cuando la marca BCSF es BCSF_LASTDATANOTIFICATION.
CBindStatusCallback::OnDataAvailable
El moniker asincrónico proporcionado por el sistema llama a OnDataAvailable
para proporcionar datos al objeto a medida que están disponiblen.
STDMETHOD(
OnDataAvailable)(DWORD grfBSCF,
DWORD dwSize,
FORMATETC* /* pformatetc */,
STGMEDIUM* pstgmed);
Parámetros
grfBSCF
[in] Valor de enumeración BSCF. Uno o varios de los siguientes: BSCF_FIRSTDATANOTIFICATION, BSCF_INTERMEDIARYDATANOTIFICATION o BSCF_LASTDATANOTIFICATION.
dwSize
[in] La cantidad acumulativa (en bytes) de los datos disponibles desde el principio del enlace. Puede ser cero, lo que indica que la cantidad de datos no es relevante o que no hay ninguna cantidad específica disponible.
pformatetc
[in] Puntero a la estructura FORMATETC que contiene el formato de los datos disponibles. Si no hay ningún formato, puede ser CF_NULL.
pstgmed
[in] Puntero a la estructura STGMEDIUM que contiene los datos reales disponibles ahora.
Valor devuelto
Uno de los valores HRESULT estándar.
Comentarios
OnDataAvailable
lee los datos y, después, llama a un método de la clase del objeto (por ejemplo, para almacenar los datos o imprimirlos en la pantalla). Consulte CBindStatusCallback::StartAsyncDownload para más información.
CBindStatusCallback::OnLowResource
Se llama cuando los recursos son bajos.
STDMETHOD(OnLowResource)(DWORD /* dwReserved */);
Parámetros
dwReserved
Reservado.
Valor devuelto
Devuelve S_OK.
CBindStatusCallback::OnObjectAvailable
Llamado por el moniker asincrónico para pasar un puntero de interfaz de objeto a la aplicación.
STDMETHOD(OnObjectAvailable)(REFID /* riid */, IUnknown* /* punk */);
Parámetros
riid
Identificador de la interfaz solicitada. Sin usar.
punk
Dirección de la interfaz IUnknown. Sin usar.
Valor devuelto
Devuelve S_OK.
CBindStatusCallback::OnProgress
Se llama para indicar el progreso de un proceso de descarga de datos.
STDMETHOD(OnProgress)(
ULONG /* ulProgress */,
ULONG /* ulProgressMax */,
ULONG /* ulStatusCode */,
LPCWSTRONG /* szStatusText */);
Parámetros
ulProgress
Entero largo sin signo. Sin usar.
ulProgressMax
Entero largo sin signo Sin usar.
ulStatusCode
Entero largo sin signo. Sin usar.
szStatusText
Dirección de un valor de cadena. Sin usar.
Valor devuelto
Devuelve S_OK.
CBindStatusCallback::OnStartBinding
Establece el miembro de datos m_spBinding en el puntero IBinding
de pBinding.
STDMETHOD(OnStartBinding)(DWORD /* dwReserved */, IBinding* pBinding);
Parámetros
dwReserved
Reservado para uso futuro.
pBinding
[in] Dirección de la interfaz IBinding de la operación de enlace actual. No puede ser NULL. El cliente debe llamar a AddRef en este puntero para mantener una referencia al objeto de enlace.
CBindStatusCallback::OnStopBinding
Libera el puntero IBinding
en el miembro de datos m_spBinding.
STDMETHOD(OnStopBinding)(HRESULT hresult, LPCWSTR /* szError */);
Parámetros
hresult
Código de estado devuelto de la operación de enlace.
szError
Dirección de un valor de cadena. Sin usar.
Comentarios
Llamado por el moniker asincrónico proporcionado por el sistema para indicar el final de la operación de enlace.
CBindStatusCallback::StartAsyncDownload
Comienza a descargar datos de forma asincrónica desde la dirección URL especificada.
HRESULT StartAsyncDownload(
T* pT,
ATL_PDATAAVAILABLE pFunc,
BSTR bstrURL,
IUnknown* pUnkContainer = NULL,
BOOL bRelative = FALSE);
Parámetros
pT
[in] Puntero al objeto que solicita la transferencia de datos asincrónica. El objeto CBindStatusCallback
se templaliza en la clase de este objeto.
pFunc
[in] Puntero a la función que recibe los datos que se están leyendo. La función es miembro de la clase de tipo T
del objeto. Consulte Comentarios para ver la sintaxis y un ejemplo.
bstrURL
[in] Dirección URL de la que se van a obtener datos. Puede ser cualquier dirección URL o nombre de archivo válido. No puede ser NULL. Por ejemplo:
CComBSTR mybstr =_T("http://somesite/data.htm")
pUnkContainer
[in] IUnknown
del contenedor. NULL de forma predeterminada.
bRelative
[in] Marca que indica si la dirección URL es relativa o absoluta. FALSE de forma predeterminada, lo que significa que la dirección URL es absoluta.
Valor devuelto
Uno de los valores HRESULT estándar.
Comentarios
Cada vez que los datos están disponibles, se envían al objeto a través de OnDataAvailable
. OnDataAvailable
lee los datos y llama a la función a la que apunta pFunc (por ejemplo, para almacenar los datos o imprimirlos en la pantalla).
La función a la que apunta pFunc es miembro de la clase del objeto y tiene la siguiente sintaxis:
void Function_Name(
CBindStatusCallback<T>* pbsc,
BYTE* pBytes,
DWORD dwSize);
En el ejemplo siguiente (tomado del ejemplo de ASYNC), la función OnData
escribe los datos recibidos en un cuadro de texto.
Ejemplo
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!!!"));
}
}
}