Compartir a través de


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

CComObjectRootEx

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!!!"));
      }
   }
}

Consulte también

Información general sobre la clase