Classe CBindStatusCallback
Essa classe implementa a interface IBindStatusCallback
.
Importante
Essa classe e os respectivos membros não podem ser usados em aplicativos executados no Windows Runtime.
Sintaxe
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
Sua classe que contém a função que será chamada à medida que os dados forem recebidos.
nBindFlags
Especifica os sinalizadores de associação retornados por GetBindInfo. A implementação padrão define a associação como assíncrona, recupera a versão mais recente dos dados/objeto e não armazena dados recuperados no cache de disco.
Membros
Construtores públicos
Nome | Descrição |
---|---|
CBindStatusCallback::CBindStatusCallback | O construtor . |
CBindStatusCallback::~CBindStatusCallback | O destruidor. |
Métodos públicos
Nome | Descrição |
---|---|
CBindStatusCallback::Download | Método estático que inicia o processo de download, cria um objeto CBindStatusCallback e chama StartAsyncDownload . |
CBindStatusCallback::GetBindInfo | Chamado pelo moniker assíncrono para solicitar informações sobre o tipo de associação a ser criado. |
CBindStatusCallback::GetPriority | Chamado pelo moniker assíncrono para obter a prioridade da operação de associação. A implementação da ATL retorna E_NOTIMPL . |
CBindStatusCallback::OnDataAvailable | Chamado para fornecer dados ao seu aplicativo à medida que ele se torna disponível. Lê os dados e chama a função passada para ele para usar os dados. |
CBindStatusCallback::OnLowResource | Chamado quando os recursos estão baixos. A implementação da ATL retorna S_OK. |
CBindStatusCallback::OnObjectAvailable | Chamado pelo moniker assíncrono para passar um ponteiro de interface de objeto para seu aplicativo. A implementação da ATL retorna S_OK. |
CBindStatusCallback::OnProgress | Chamado para indicar o progresso no processo de download de dados. A implementação da ATL retorna S_OK. |
CBindStatusCallback::OnStartBinding | Chamada quando a associação é iniciada. |
CBindStatusCallback::OnStopBinding | Chamada quando a transferência de dados assíncrona é parada. |
CBindStatusCallback::StartAsyncDownload | Inicializa os bytes disponíveis e os bytes lidos para zero, cria um objeto de fluxo de tipo push de um URL e chama OnDataAvailable sempre que os dados estão disponíveis. |
Membros de Dados Públicos
Nome | Descrição |
---|---|
CBindStatusCallback::m_dwAvailableToRead | O número de bytes disponíveis para leitura. |
CBindStatusCallback::m_dwTotalRead | O número total de bytes lidos. |
CBindStatusCallback::m_pFunc | Ponteiro para a chamada de função quando os dados estão disponíveis. |
CBindStatusCallback::m_pT | Ponteiro para o objeto que solicita a transferência de dados assíncrona. |
CBindStatusCallback::m_spBindCtx | Ponteiro para a interface IBindCtx para a operação de associação atual. |
CBindStatusCallback::m_spBinding | Ponteiro para a interface IBinding para a operação de associação atual. |
CBindStatusCallback::m_spMoniker | Ponteiro para a interface IMoniker para o URL a ser usado. |
CBindStatusCallback::m_spStream | Ponteiro para a interface IStream para a transferência de dados. |
Comentários
A classe CBindStatusCallback
implementa a interface IBindStatusCallback
. IBindStatusCallback
deve ser implementado por seu aplicativo para que ele possa receber notificações de uma transferência de dados assíncrona. O moniker assíncrono fornecido pelo sistema usa métodos IBindStatusCallback
para enviar e receber informações sobre a transferência de dados assíncrona de e para o objeto.
Normalmente, o objeto CBindStatusCallback
está associado a uma operação de associação específica. Por exemplo, na amostra ASYNC, quando você define a propriedade URL, ela cria um objeto CBindStatusCallback
na chamada para 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;
}
O moniker assíncrono usa a função de retorno de chamada OnData
para chamar seu aplicativo quando ele tem dados. O moniker assíncrono é fornecido pelo sistema.
Hierarquia de herança
CComObjectRootBase
IBindStatusCallback
CBindStatusCallback
Requisitos
Cabeçalho: atlctl.h
CBindStatusCallback::CBindStatusCallback
O construtor .
CBindStatusCallback();
Comentários
Cria um objeto para receber notificações sobre a transferência de dados assíncrona. Normalmente, um objeto é criado para cada operação de associação.
O construtor também inicializa m_pT e m_pFunc para NULL.
CBindStatusCallback::~CBindStatusCallback
O destruidor.
~CBindStatusCallback();
Comentários
Libera todos os recursos alocados.
CBindStatusCallback::Download
Cria um objeto CBindStatusCallback
e chama StartAsyncDownload
para começar o download de dados de modo assíncrono do URL especificado.
static HRESULT Download(
T* pT,
ATL_PDATAAVAILABLE pFunc,
BSTR bstrURL,
IUnknown* pUnkContainer = NULL,
BOOL bRelative = FALSE);
Parâmetros
pT
[in] Um ponteiro para o objeto que solicita a transferência de dados assíncrona. O objeto CBindStatusCallback
é modelado na classe deste objeto.
pFunc
[in] Um ponteiro para a função que recebe os dados lidos. A função é um membro da classe de tipo T
do objeto. Consulte StartAsyncDownload para obter sintaxe e um exemplo.
bstrURL
[in] O URL do qual obter dados. Pode ser qualquer URL ou nome de arquivo válido. Não pode ser NULL. Por exemplo:
CComBSTR mybstr =_T("http://somesite/data.htm")
pUnkContainer
[in] O IUnknown
do contêiner. NULL por padrão.
bRelative
[in] Um sinalizador que indica se o URL é relativo ou absoluto. FALSE por padrão, o que significa que o URL é absoluto.
Valor de retorno
Um dos valores HRESULT padrão.
Comentários
Toda vez que os dados estão disponíveis, eles são enviados para o objeto por meio de OnDataAvailable
. OnDataAvailable
lê os dados e chama a função apontada por pFunc (por exemplo, para armazenar os dados ou imprimi-los na tela).
CBindStatusCallback::GetBindInfo
Chamado para informar ao moniker como associar.
STDMETHOD(GetBindInfo)(
DWORD* pgrfBSCF,
BINDINFO* pbindinfo);
Parâmetros
pgrfBSCF
[out] Um ponteiro para valores de enumeração BINDF que indicam como a operação de associação deve ocorrer. Por padrão, defina com os seguintes valores de enumeração:
Download assíncrono BINDF_ASYNCHRONOUS.
OnDataAvailable
BINDF_ASYNCSTORAGE retorna E_PENDING quando os dados ainda não estão disponíveis em vez de bloquear até que os dados estejam disponíveis.
A operação de associar BINDF_GETNEWESTVERSION deve recuperar a versão mais recente dos dados.
A operação de associar BINDF_NOWRITECACHE não deve armazenar dados recuperados no cache de disco.
pbindinfo
[in, out] Um ponteiro para a estrutura BINDINFO
que fornece mais informações sobre como o objeto deseja que a associação ocorra.
Valor de retorno
Um dos valores HRESULT padrão.
Comentários
A implementação padrão define a associação como assíncrona e o uso do modelo de push de dados. Em um modelo de push de dados, o moniker conduz a operação de associação assíncrona e notifica continuamente o cliente sempre que novos dados ficam disponíveis.
CBindStatusCallback::GetPriority
Chamado pelo moniker assíncrono para obter a prioridade da operação de associação.
STDMETHOD(GetPriority)(LONG* pnPriority);
Parâmetros
pnPriority
[out] Endereço da variável LONG que, com êxito, recebe a prioridade.
Valor de retorno
Retorna E_NOTIMPL.
CBindStatusCallback::m_dwAvailableToRead
Pode ser usado para armazenar o número de bytes disponíveis para leitura.
DWORD m_dwAvailableToRead;
Comentários
Inicializado como zero em StartAsyncDownload
.
CBindStatusCallback::m_dwTotalRead
O total cumulativo de bytes lidos na transferência de dados assíncrona.
DWORD m_dwTotalRead;
Comentários
Incrementado sempre que OnDataAvailable
é chamado pelo número de bytes realmente lidos. Inicializado como zero em StartAsyncDownload
.
CBindStatusCallback::m_pFunc
A função apontada por m_pFunc
é chamada por OnDataAvailable
depois de ler os dados disponíveis (por exemplo, para armazenar os dados ou imprimi-los na tela).
ATL_PDATAAVAILABLE m_pFunc;
Comentários
A função apontada por m_pFunc
um membro da classe do objeto e tem a seguinte sintaxe:
void Function_Name(
CBindStatusCallback<T>* pbsc,
BYTE* pBytes,
DWORD dwSize
);
CBindStatusCallback::m_pT
Um ponteiro para o objeto que solicita a transferência de dados assíncrona.
T* m_pT;
Comentários
O objeto CBindStatusCallback
é modelado na classe deste objeto.
CBindStatusCallback::m_spBindCtx
Um ponteiro para uma interface IBindCtx que fornece acesso ao contexto de associação (um objeto que armazena informações sobre uma operação de associação de moniker específica).
CComPtr<IBindCtx> m_spBindCtx;
Comentários
Inicializado em StartAsyncDownload
.
CBindStatusCallback::m_spBinding
Ponteiro para a interface IBinding
para a operação de associação atual.
CComPtr<IBinding> m_spBinding;
Comentários
Inicializado em OnStartBinding
e liberado em OnStopBinding
.
CBindStatusCallback::m_spMoniker
Um ponteiro para a interface IMoniker para o URL a ser usado.
CComPtr<IMoniker> m_spMoniker;
Comentários
Inicializado em StartAsyncDownload
.
CBindStatusCallback::m_spStream
Um ponteiro para a interface IStream para a operação de associação atual.
CComPtr<IStream> m_spStream;
Comentários
Inicializado em OnDataAvailable
na estrutura STGMEDIUM
quando o sinalizador BCSF é BCSF_FIRSTDATANOTIFICATION e liberado quando o sinalizador BCSF é BCSF_LASTDATANOTIFICATION.
CBindStatusCallback::OnDataAvailable
O moniker assíncrono fornecido pelo sistema chama OnDataAvailable
para fornecer dados ao objeto conforme ele se torna disponível.
STDMETHOD(
OnDataAvailable)(DWORD grfBSCF,
DWORD dwSize,
FORMATETC* /* pformatetc */,
STGMEDIUM* pstgmed);
Parâmetros
grfBSCF
[in] Um valor de enumeração BSCF. Uma ou mais das seguintes opções: BSCF_FIRSTDATANOTIFICATION, BSCF_INTERMEDIARYDATANOTIFICATION ou BSCF_LASTDATANOTIFICATION.
dwSize
[in] A quantidade cumulativa (em bytes) de dados disponíveis desde o início da associação. Pode ser zero, indicando que a quantidade de dados não é relevante ou que nenhum valor específico ficou disponível.
pformatetc
[in] Ponteiro para a estrutura FORMATETC que contém o formato dos dados disponíveis. Se não houver formato, poderá ser CF_NULL.
pstgmed
[in] Ponteiro para a estrutura STGMEDIUM que contém os dados reais agora disponíveis.
Valor de retorno
Um dos valores HRESULT padrão.
Comentários
OnDataAvailable
lê os dados e chama um método da classe do objeto (por exemplo, para armazenar os dados ou imprimi-los na tela). Consulte CBindStatusCallback::StartAsyncDownload para obter detalhes.
CBindStatusCallback::OnLowResource
Chamado quando os recursos estão baixos.
STDMETHOD(OnLowResource)(DWORD /* dwReserved */);
Parâmetros
dwReserved
Reservado.
Valor de retorno
Returns S_OK.
CBindStatusCallback::OnObjectAvailable
Chamado pelo moniker assíncrono para passar um ponteiro de interface de objeto para seu aplicativo.
STDMETHOD(OnObjectAvailable)(REFID /* riid */, IUnknown* /* punk */);
Parâmetros
riid
O identificador de interface da interface solicitada. Não utilizado.
punk
Endereço da interface IUnknown. Não utilizado.
Valor de retorno
Returns S_OK.
CBindStatusCallback::OnProgress
Chamado para indicar o progresso no processo de download de dados.
STDMETHOD(OnProgress)(
ULONG /* ulProgress */,
ULONG /* ulProgressMax */,
ULONG /* ulStatusCode */,
LPCWSTRONG /* szStatusText */);
Parâmetros
ulProgress
Inteiro longo não assinado. Não utilizado.
ulProgressMax
Inteiro longo não assinado não usado.
ulStatusCode
Inteiro longo não assinado. Não utilizado.
szStatusText
Endereço de um valor de cadeia de caracteres. Não utilizado.
Valor de retorno
Returns S_OK.
CBindStatusCallback::OnStartBinding
Define o membro de dados m_spBinding para o ponteiro IBinding
em pBinding.
STDMETHOD(OnStartBinding)(DWORD /* dwReserved */, IBinding* pBinding);
Parâmetros
dwReserved
Reservado para uso futuro.
pBinding
[in] Endereço da interface IBinding da operação de associação atual. Não pode ser NULL. O cliente deve chamar AddRef neste ponteiro para manter uma referência ao objeto de associação.
CBindStatusCallback::OnStopBinding
Libera o ponteiro IBinding
no membro de dados m_spBinding.
STDMETHOD(OnStopBinding)(HRESULT hresult, LPCWSTR /* szError */);
Parâmetros
hresult
Código de status retornado da operação de associação.
szError
Endereço de um valor de cadeia de caracteres. Não utilizado.
Comentários
Chamado pelo moniker assíncrono fornecido pelo sistema para indicar o fim da operação de associação.
CBindStatusCallback::StartAsyncDownload
Inicia o download de dados de modo assíncrono do URL especificado.
HRESULT StartAsyncDownload(
T* pT,
ATL_PDATAAVAILABLE pFunc,
BSTR bstrURL,
IUnknown* pUnkContainer = NULL,
BOOL bRelative = FALSE);
Parâmetros
pT
[in] Um ponteiro para o objeto que solicita a transferência de dados assíncrona. O objeto CBindStatusCallback
é modelado na classe deste objeto.
pFunc
[in] Um ponteiro para a função que recebe os dados que estão sendo lidos. A função é um membro da classe de tipo T
do objeto. Consulte Comentários para obter sintaxe e um exemplo.
bstrURL
[in] O URL do qual obter dados. Pode ser qualquer URL ou nome de arquivo válido. Não pode ser NULL. Por exemplo:
CComBSTR mybstr =_T("http://somesite/data.htm")
pUnkContainer
[in] O IUnknown
do contêiner. NULL por padrão.
bRelative
[in] Um sinalizador que indica se o URL é relativo ou absoluto. FALSE por padrão, o que significa que o URL é absoluto.
Valor de retorno
Um dos valores HRESULT padrão.
Comentários
Toda vez que os dados estão disponíveis, eles são enviados para o objeto por meio de OnDataAvailable
. OnDataAvailable
lê os dados e chama a função apontada por pFunc (por exemplo, para armazenar os dados ou imprimi-los na tela).
A função apontada por pFunc é um membro da classe do objeto e tem a seguinte sintaxe:
void Function_Name(
CBindStatusCallback<T>* pbsc,
BYTE* pBytes,
DWORD dwSize);
No exemplo a seguir (obtido da amostra ASYNC), a função OnData
grava os dados recebidos em uma caixa de texto.
Exemplo
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!!!"));
}
}
}