Classe CBindStatusCallback
La classe implementa l'interfaccia IBindStatusCallback
.
Importante
Questa classe e i relativi membri non possono essere usati nelle applicazioni eseguite in Windows Runtime.
Sintassi
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>
Parametri
T
Classe contenente la funzione che verrà chiamata come vengono ricevuti i dati.
nBindFlags
Specifica i flag di associazione restituiti da GetBindInfo. L'implementazione predefinita imposta l'associazione come asincrona, recupera la versione più recente dell'oggetto/dati e non archivia i dati recuperati nella cache del disco.
Membri
Costruttori pubblici
Nome | Descrizione |
---|---|
CBindStatusCallback::CBindStatusCallback | Costruttore. |
CBindStatusCallback::~CBindStatusCallback | Distruttore. |
Metodi pubblici
Nome | Descrizione |
---|---|
CBindStatusCallback::D ownload | Metodo statico che avvia il processo di download, crea un CBindStatusCallback oggetto e chiama StartAsyncDownload . |
CBindStatusCallback::GetBindInfo | Chiamato dal moniker asincrono per richiedere informazioni sul tipo di binding da creare. |
CBindStatusCallback::GetPriority | Chiamato dal moniker asincrono per ottenere la priorità dell'operazione di associazione. L'implementazione ATL restituisce E_NOTIMPL . |
CBindStatusCallback::OnDataAvailable | Chiamato per fornire i dati all'applicazione non appena diventa disponibile. Legge i dati, quindi chiama la funzione passata per usare i dati. |
CBindStatusCallback::OnLowResource | Chiamato quando le risorse sono basse. L'implementazione ATL restituisce S_OK. |
CBindStatusCallback::OnObjectAvailable | Chiamato dal moniker asincrono per passare un puntatore dell'interfaccia oggetto all'applicazione. L'implementazione ATL restituisce S_OK. |
CBindStatusCallback::OnProgress | Chiamato per indicare lo stato di avanzamento di un processo di download dei dati. L'implementazione ATL restituisce S_OK. |
CBindStatusCallback::OnStartBinding | Chiamato all'avvio dell'associazione. |
CBindStatusCallback::OnStopBinding | Chiamato quando il trasferimento asincrono dei dati viene arrestato. |
CBindStatusCallback::StartAsyncDownload | Inizializza i byte disponibili e i byte letti su zero, crea un oggetto flusso di tipo push da un URL e chiama OnDataAvailable ogni volta che sono disponibili i dati. |
Membri dati pubblici
Nome | Descrizione |
---|---|
CBindStatusCallback::m_dwAvailableToRead | Numero di byte disponibili per la lettura. |
CBindStatusCallback::m_dwTotalRead | Numero totale di byte letti. |
CBindStatusCallback::m_pFunc | Puntatore alla funzione chiamata quando i dati sono disponibili. |
CBindStatusCallback::m_pT | Puntatore all'oggetto che richiede il trasferimento asincrono dei dati. |
CBindStatusCallback::m_spBindCtx | Puntatore all'interfaccia IBindCtx per l'operazione di associazione corrente. |
CBindStatusCallback::m_spBinding | Puntatore all'interfaccia per l'operazione IBinding di associazione corrente. |
CBindStatusCallback::m_spMoniker | Puntatore all'interfaccia IMoniker per l'URL da usare. |
CBindStatusCallback::m_spStream | Puntatore all'interfaccia IStream per il trasferimento dei dati. |
Osservazioni:
La classe CBindStatusCallback
implementa l'interfaccia IBindStatusCallback
. IBindStatusCallback
deve essere implementato dall'applicazione in modo che possa ricevere notifiche da un trasferimento asincrono dei dati. Il moniker asincrono fornito dal sistema usa IBindStatusCallback
metodi per inviare e ricevere informazioni sul trasferimento asincrono dei dati da e verso l'oggetto.
In genere, l'oggetto CBindStatusCallback
è associato a un'operazione di associazione specifica. Nell'esempio ASYNC , ad esempio, quando si imposta la proprietà URL, viene creato un CBindStatusCallback
oggetto nella chiamata 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;
}
Il moniker asincrono usa la funzione OnData
di callback per chiamare l'applicazione quando contiene dati. Il moniker asincrono viene fornito dal sistema.
Gerarchia di ereditarietà
CComObjectRootBase
IBindStatusCallback
CBindStatusCallback
Requisiti
Intestazione: atlctl.h
CBindStatusCallback::CBindStatusCallback
Costruttore.
CBindStatusCallback();
Osservazioni:
Crea un oggetto per ricevere notifiche relative al trasferimento asincrono dei dati. In genere, viene creato un oggetto per ogni operazione di associazione.
Il costruttore inizializza anche m_pT e m_pFunc su NULL.
CBindStatusCallback::~CBindStatusCallback
Distruttore.
~CBindStatusCallback();
Osservazioni:
Libera tutte le risorse allocate.
CBindStatusCallback::D ownload
Crea un CBindStatusCallback
oggetto e chiama StartAsyncDownload
per iniziare a scaricare i dati in modo asincrono dall'URL specificato.
static HRESULT Download(
T* pT,
ATL_PDATAAVAILABLE pFunc,
BSTR bstrURL,
IUnknown* pUnkContainer = NULL,
BOOL bRelative = FALSE);
Parametri
Pt
[in] Puntatore all'oggetto che richiede il trasferimento asincrono dei dati. L'oggetto CBindStatusCallback
viene templatizzato nella classe dell'oggetto.
pFunc
[in] Puntatore alla funzione che riceve i dati letti. La funzione è un membro della classe dell'oggetto di tipo T
. Vedere StartAsyncDownload per la sintassi e un esempio.
bstrURL
[in] URL da cui ottenere i dati. Può essere qualsiasi URL o nome file valido. Non può essere NULL. Ad esempio:
CComBSTR mybstr =_T("http://somesite/data.htm")
pUnkContainer
[in] Oggetto IUnknown
del contenitore. NULL per impostazione predefinita.
bRelative
[in] Flag che indica se l'URL è relativo o assoluto. FALSE per impostazione predefinita, ovvero l'URL è assoluto.
Valore restituito
Uno dei valori HRESULT standard.
Osservazioni:
Ogni volta che i dati sono disponibili, vengono inviati all'oggetto tramite OnDataAvailable
. OnDataAvailable
legge i dati e chiama la funzione a cui punta pFunc , ad esempio per archiviare i dati o stamparli sullo schermo.
CBindStatusCallback::GetBindInfo
Chiamato per indicare al moniker come eseguire l'associazione.
STDMETHOD(GetBindInfo)(
DWORD* pgrfBSCF,
BINDINFO* pbindinfo);
Parametri
pgrfBSCF
[out] Puntatore ai valori di enumerazione BINDF che indicano come deve verificarsi l'operazione di associazione. Per impostazione predefinita, impostare con i valori di enumerazione seguenti:
BINDF_ASYNCHRONOUS download asincrono.
OnDataAvailable
BINDF_ASYNCSTORAGE restituisce E_PENDING quando i dati non sono ancora disponibili anziché bloccarli finché i dati non sono disponibili.
BINDF_GETNEWESTVERSION L'operazione di associazione deve recuperare la versione più recente dei dati.
BINDF_NOWRITECACHE L'operazione di associazione non deve archiviare i dati recuperati nella cache del disco.
pbindinfo
[in, out] Puntatore alla BINDINFO
struttura che fornisce altre informazioni sul modo in cui l'oggetto desidera che si verifichi l'associazione.
Valore restituito
Uno dei valori HRESULT standard.
Osservazioni:
L'implementazione predefinita imposta l'associazione come asincrona e per l'uso del modello di push dei dati. Nel modello di push dei dati il moniker determina l'operazione di associazione asincrona e invia continuamente una notifica al client ogni volta che sono disponibili nuovi dati.
CBindStatusCallback::GetPriority
Chiamato dal moniker asincrono per ottenere la priorità dell'operazione di associazione.
STDMETHOD(GetPriority)(LONG* pnPriority);
Parametri
pnPriority
[out] Indirizzo della variabile LONG che, in caso di esito positivo, riceve la priorità.
Valore restituito
Restituisce E_NOTIMPL.
CBindStatusCallback::m_dwAvailableToRead
Può essere usato per archiviare il numero di byte disponibili per la lettura.
DWORD m_dwAvailableToRead;
Osservazioni:
Inizializzato su zero in StartAsyncDownload
.
CBindStatusCallback::m_dwTotalRead
Totale cumulativo di byte letti nel trasferimento asincrono dei dati.
DWORD m_dwTotalRead;
Osservazioni:
Incrementato ogni volta OnDataAvailable
che viene chiamato dal numero di byte effettivamente letti. Inizializzato su zero in StartAsyncDownload
.
CBindStatusCallback::m_pFunc
La funzione a m_pFunc
cui punta viene chiamata da OnDataAvailable
dopo aver letto i dati disponibili, ad esempio per archiviare i dati o stamparli sullo schermo.
ATL_PDATAAVAILABLE m_pFunc;
Osservazioni:
La funzione a m_pFunc
cui punta è un membro della classe dell'oggetto e ha la sintassi seguente:
void Function_Name(
CBindStatusCallback<T>* pbsc,
BYTE* pBytes,
DWORD dwSize
);
CBindStatusCallback::m_pT
Puntatore all'oggetto che richiede il trasferimento asincrono dei dati.
T* m_pT;
Osservazioni:
L'oggetto CBindStatusCallback
viene templatizzato nella classe dell'oggetto.
CBindStatusCallback::m_spBindCtx
Puntatore a un'interfaccia IBindCtx che fornisce l'accesso al contesto di associazione (un oggetto che archivia informazioni su un'operazione di associazione moniker specifica).
CComPtr<IBindCtx> m_spBindCtx;
Osservazioni:
Inizializzato in StartAsyncDownload
.
CBindStatusCallback::m_spBinding
Puntatore all'interfaccia IBinding
dell'operazione di associazione corrente.
CComPtr<IBinding> m_spBinding;
Osservazioni:
Inizializzato in OnStartBinding
e rilasciato in OnStopBinding
.
CBindStatusCallback::m_spMoniker
Puntatore all'interfaccia IMoniker per l'URL da usare.
CComPtr<IMoniker> m_spMoniker;
Osservazioni:
Inizializzato in StartAsyncDownload
.
CBindStatusCallback::m_spStream
Puntatore all'interfaccia IStream dell'operazione di associazione corrente.
CComPtr<IStream> m_spStream;
Osservazioni:
Inizializzato in OnDataAvailable
dalla STGMEDIUM
struttura quando il flag BCSF viene BCSF_FIRSTDATANOTIFICATION e rilasciato quando il flag BCSF è BCSF_LASTDATANOTIFICATION.
CBindStatusCallback::OnDataAvailable
Il moniker asincrono fornito dal sistema chiama OnDataAvailable
per fornire dati all'oggetto non appena diventa disponibile.
STDMETHOD(
OnDataAvailable)(DWORD grfBSCF,
DWORD dwSize,
FORMATETC* /* pformatetc */,
STGMEDIUM* pstgmed);
Parametri
grfBSCF
[in] Valore di enumerazione BSCF. Una o più delle opzioni seguenti: BSCF_FIRSTDATANOTIFICATION, BSCF_INTERMEDIARYDATANOTIFICATION o BSCF_LASTDATANOTIFICATION.
dwSize
[in] Quantità cumulativa (in byte) di dati disponibili dall'inizio dell'associazione. Può essere zero, a indicare che la quantità di dati non è rilevante o che non è stata resa disponibile alcuna quantità specifica.
pformatetc
[in] Puntatore alla struttura FORMATETC che contiene il formato dei dati disponibili. Se non è presente alcun formato, può essere CF_NULL.
pstgmed
[in] Puntatore alla struttura STGMEDIUM che contiene i dati effettivi ora disponibili.
Valore restituito
Uno dei valori HRESULT standard.
Osservazioni:
OnDataAvailable
legge i dati, quindi chiama un metodo della classe dell'oggetto (ad esempio, per archiviare i dati o stamparli sullo schermo). Per informazioni dettagliate, vedere CBindStatusCallback::StartAsyncDownload .
CBindStatusCallback::OnLowResource
Chiamato quando le risorse sono basse.
STDMETHOD(OnLowResource)(DWORD /* dwReserved */);
Parametri
dwReserved
Riservato.
Valore restituito
Restituisce S_OK.
CBindStatusCallback::OnObjectAvailable
Chiamato dal moniker asincrono per passare un puntatore dell'interfaccia oggetto all'applicazione.
STDMETHOD(OnObjectAvailable)(REFID /* riid */, IUnknown* /* punk */);
Parametri
riid
Identificatore di interfaccia dell'interfaccia richiesta. Non utilizzato.
Punk
Indirizzo dell'interfaccia IUnknown. Non utilizzato.
Valore restituito
Restituisce S_OK.
CBindStatusCallback::OnProgress
Chiamato per indicare lo stato di avanzamento di un processo di download dei dati.
STDMETHOD(OnProgress)(
ULONG /* ulProgress */,
ULONG /* ulProgressMax */,
ULONG /* ulStatusCode */,
LPCWSTRONG /* szStatusText */);
Parametri
ulProgress
Intero long senza segno. Non utilizzato.
ulProgressMax
Intero long senza segno inutilizzato.
ulStatusCode
Intero long senza segno. Non utilizzato.
szStatusText
Indirizzo di un valore stringa. Non utilizzato.
Valore restituito
Restituisce S_OK.
CBindStatusCallback::OnStartBinding
Imposta il membro dati m_spBinding sul IBinding
puntatore in pBinding.
STDMETHOD(OnStartBinding)(DWORD /* dwReserved */, IBinding* pBinding);
Parametri
dwReserved
Riservato a un uso futuro.
pBinding
[in] Indirizzo dell'interfaccia IBinding dell'operazione di associazione corrente. Non può essere NULL. Il client deve chiamare AddRef su questo puntatore per mantenere un riferimento all'oggetto di associazione.
CBindStatusCallback::OnStopBinding
Rilascia il IBinding
puntatore nel membro dati m_spBinding.
STDMETHOD(OnStopBinding)(HRESULT hresult, LPCWSTR /* szError */);
Parametri
hresult
Codice di stato restituito dall'operazione di associazione.
szError
Indirizzo di un valore stringa. Non utilizzato.
Osservazioni:
Chiamato dal moniker asincrono fornito dal sistema per indicare la fine dell'operazione di associazione.
CBindStatusCallback::StartAsyncDownload
Avvia il download asincrono dei dati dall'URL specificato.
HRESULT StartAsyncDownload(
T* pT,
ATL_PDATAAVAILABLE pFunc,
BSTR bstrURL,
IUnknown* pUnkContainer = NULL,
BOOL bRelative = FALSE);
Parametri
Pt
[in] Puntatore all'oggetto che richiede il trasferimento asincrono dei dati. L'oggetto CBindStatusCallback
viene templatizzato nella classe dell'oggetto.
pFunc
[in] Puntatore alla funzione che riceve i dati letti. La funzione è un membro della classe dell'oggetto di tipo T
. Vedere La sezione Osservazioni per la sintassi e un esempio.
bstrURL
[in] URL da cui ottenere i dati. Può essere qualsiasi URL o nome file valido. Non può essere NULL. Ad esempio:
CComBSTR mybstr =_T("http://somesite/data.htm")
pUnkContainer
[in] Oggetto IUnknown
del contenitore. NULL per impostazione predefinita.
bRelative
[in] Flag che indica se l'URL è relativo o assoluto. FALSE per impostazione predefinita, ovvero l'URL è assoluto.
Valore restituito
Uno dei valori HRESULT standard.
Osservazioni:
Ogni volta che i dati sono disponibili, vengono inviati all'oggetto tramite OnDataAvailable
. OnDataAvailable
legge i dati e chiama la funzione a cui punta pFunc , ad esempio per archiviare i dati o stamparli sullo schermo.
La funzione a cui punta pFunc è un membro della classe dell'oggetto e ha la sintassi seguente:
void Function_Name(
CBindStatusCallback<T>* pbsc,
BYTE* pBytes,
DWORD dwSize);
Nell'esempio seguente (tratto dall'esempio ASYNC ), la funzione OnData
scrive i dati ricevuti in una casella di testo.
Esempio
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!!!"));
}
}
}