CBindStatusCallback, classe
Cette classe implémente l’interface IBindStatusCallback
.
Important
Cette classe et ses membres ne peuvent pas être utilisés dans les applications qui s’exécutent dans Windows Runtime.
Syntaxe
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>
Paramètres
T
Votre classe contenant la fonction qui sera appelée à mesure que les données sont reçues.
nBindFlags
Spécifie les indicateurs de liaison retournés par GetBindInfo. L’implémentation par défaut définit la liaison comme asynchrone, récupère la version la plus récente de l’objet/données et ne stocke pas les données récupérées dans le cache du disque.
Membres
Constructeurs publics
Nom | Description |
---|---|
CBindStatusCallback ::CBindStatusCallback | Constructeur . |
CBindStatusCallback ::~CBindStatusCallback | Destructeur. |
Méthodes publiques
Nom | Description |
---|---|
CBindStatusCallback ::D ownload | Méthode statique qui démarre le processus de téléchargement, crée un CBindStatusCallback objet et appelle StartAsyncDownload . |
CBindStatusCallback ::GetBindInfo | Appelé par le moniker asynchrone pour demander des informations sur le type de liaison à créer. |
CBindStatusCallback ::GetPriority | Appelé par le moniker asynchrone pour obtenir la priorité de l’opération de liaison. L’implémentation ATL retourne E_NOTIMPL . |
CBindStatusCallback ::OnDataAvailable | Appelé pour fournir des données à votre application dès qu’elle devient disponible. Lit les données, puis appelle la fonction transmise pour utiliser les données. |
CBindStatusCallback ::OnLowResource | Appelé quand les ressources sont faibles. L’implémentation ATL retourne S_OK. |
CBindStatusCallback ::OnObjectAvailable | Appelé par le moniker asynchrone pour passer un pointeur d’interface objet à votre application. L’implémentation ATL retourne S_OK. |
CBindStatusCallback ::OnProgress | Appelé pour indiquer la progression d’un processus de téléchargement de données. L’implémentation ATL retourne S_OK. |
CBindStatusCallback ::OnStartBinding | Appelé lors du démarrage de la liaison. |
CBindStatusCallback ::OnStopBinding | Appelé lorsque le transfert de données asynchrone est arrêté. |
CBindStatusCallback ::StartAsyncDownload | Initialise les octets disponibles et les octets lus à zéro, crée un objet de flux de type push à partir d’une URL et appelle OnDataAvailable chaque fois que les données sont disponibles. |
Membres de données publics
Nom | Description |
---|---|
CBindStatusCallback ::m_dwAvailableToRead | Nombre d’octets disponibles pour la lecture. |
CBindStatusCallback ::m_dwTotalRead | Nombre total d’octets lus. |
CBindStatusCallback ::m_pFunc | Pointeur vers la fonction appelée lorsque les données sont disponibles. |
CBindStatusCallback ::m_pT | Pointeur vers l’objet demandant le transfert de données asynchrone. |
CBindStatusCallback ::m_spBindCtx | Pointeur vers l’interface IBindCtx pour l’opération de liaison actuelle. |
CBindStatusCallback ::m_spBinding | Pointeur vers l’interface IBinding pour l’opération de liaison actuelle. |
CBindStatusCallback ::m_spMoniker | Pointeur vers l’interface IMoniker pour l’URL à utiliser. |
CBindStatusCallback ::m_spStream | Pointeur vers l’interface IStream pour le transfert de données. |
Notes
La classe CBindStatusCallback
implémente l’interface IBindStatusCallback
. IBindStatusCallback
doit être implémenté par votre application pour qu’elle puisse recevoir des notifications à partir d’un transfert de données asynchrone. Le moniker asynchrone fourni par le système utilise IBindStatusCallback
des méthodes pour envoyer et recevoir des informations sur le transfert de données asynchrone vers et depuis votre objet.
En règle générale, l’objet CBindStatusCallback
est associé à une opération de liaison spécifique. Par exemple, dans l’exemple ASYNC , lorsque vous définissez la propriété URL, il crée un CBindStatusCallback
objet dans l’appel à 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;
}
Le moniker asynchrone utilise la fonction OnData
de rappel pour appeler votre application lorsqu’elle a des données. Le moniker asynchrone est fourni par le système.
Hiérarchie d'héritage
CComObjectRootBase
IBindStatusCallback
CBindStatusCallback
Spécifications
En-tête : atlctl.h
CBindStatusCallback ::CBindStatusCallback
Constructeur .
CBindStatusCallback();
Notes
Crée un objet pour recevoir des notifications concernant le transfert de données asynchrone. En règle générale, un objet est créé pour chaque opération de liaison.
Le constructeur initialise également m_pT et m_pFunc sur NULL.
CBindStatusCallback ::~CBindStatusCallback
Destructeur.
~CBindStatusCallback();
Notes
Libère toutes les ressources allouées.
CBindStatusCallback ::D ownload
Crée un CBindStatusCallback
objet et des appels StartAsyncDownload
pour commencer à télécharger des données de manière asynchrone à partir de l’URL spécifiée.
static HRESULT Download(
T* pT,
ATL_PDATAAVAILABLE pFunc,
BSTR bstrURL,
IUnknown* pUnkContainer = NULL,
BOOL bRelative = FALSE);
Paramètres
Pt
[in] Pointeur vers l’objet demandant le transfert de données asynchrone. L’objet CBindStatusCallback
est templaté sur la classe de cet objet.
pFunc
[in] Pointeur vers la fonction qui reçoit les données lues. La fonction est membre de la classe de type T
de votre objet. Consultez StartAsyncDownload pour obtenir une syntaxe et un exemple.
bstrURL
[in] URL à partir de laquelle obtenir des données. Il peut s’agir d’une URL ou d’un nom de fichier valide. Ne peut pas avoir la valeur NULL. Par exemple :
CComBSTR mybstr =_T("http://somesite/data.htm")
pUnkContainer
[in] Du IUnknown
conteneur. NULL par défaut.
bRelative
[in] Indicateur indiquant si l’URL est relative ou absolue. FALSE par défaut, ce qui signifie que l’URL est absolue.
Valeur de retour
Une des valeurs HRESULT standard.
Notes
Chaque fois que les données sont disponibles, elles sont envoyées à l’objet via OnDataAvailable
. OnDataAvailable
lit les données et appelle la fonction pointée par pFunc (par exemple, pour stocker les données ou l’imprimer à l’écran).
CBindStatusCallback ::GetBindInfo
Appelé pour dire au moniker comment lier.
STDMETHOD(GetBindInfo)(
DWORD* pgrfBSCF,
BINDINFO* pbindinfo);
Paramètres
pgrfBSCF
[out] Pointeur vers des valeurs d’énumération BINDF indiquant comment l’opération de liaison doit se produire. Par défaut, définissez les valeurs d’énumération suivantes :
BINDF_ASYNCHRONOUS téléchargement asynchrone.
OnDataAvailable
BINDF_ASYNCSTORAGE retourne E_PENDING lorsque les données ne sont pas encore disponibles plutôt que de bloquer jusqu’à ce que les données soient disponibles.
BINDF_GETNEWESTVERSION L’opération de liaison doit récupérer la version la plus récente des données.
BINDF_NOWRITECACHE L’opération de liaison ne doit pas stocker les données récupérées dans le cache de disque.
pbindinfo
[in, out] Pointeur vers la BINDINFO
structure donnant plus d’informations sur la façon dont l’objet souhaite que la liaison se produise.
Valeur de retour
Une des valeurs HRESULT standard.
Notes
L’implémentation par défaut définit la liaison comme asynchrone et utilise le modèle push de données. Dans le modèle push de données, le moniker pilote l’opération de liaison asynchrone et avertit en permanence le client chaque fois que de nouvelles données sont disponibles.
CBindStatusCallback ::GetPriority
Appelé par le moniker asynchrone pour obtenir la priorité de l’opération de liaison.
STDMETHOD(GetPriority)(LONG* pnPriority);
Paramètres
pnPriority
[out] Adresse de la variable LONG qui, en cas de réussite, reçoit la priorité.
Valeur de retour
Retourne E_NOTIMPL.
CBindStatusCallback ::m_dwAvailableToRead
Peut être utilisé pour stocker le nombre d’octets disponibles pour être lus.
DWORD m_dwAvailableToRead;
Notes
Initialisé à zéro en StartAsyncDownload
.
CBindStatusCallback ::m_dwTotalRead
Total cumulé d’octets lus dans le transfert de données asynchrone.
DWORD m_dwTotalRead;
Notes
Incrémenté chaque fois OnDataAvailable
est appelé par le nombre d’octets réellement lus. Initialisé à zéro en StartAsyncDownload
.
CBindStatusCallback ::m_pFunc
La fonction pointée par m_pFunc
est appelée OnDataAvailable
après avoir lu les données disponibles (par exemple, pour stocker les données ou l’imprimer à l’écran).
ATL_PDATAAVAILABLE m_pFunc;
Notes
La fonction pointée par m_pFunc
est un membre de la classe de votre objet et a la syntaxe suivante :
void Function_Name(
CBindStatusCallback<T>* pbsc,
BYTE* pBytes,
DWORD dwSize
);
CBindStatusCallback ::m_pT
Pointeur vers l’objet demandant le transfert de données asynchrone.
T* m_pT;
Notes
L’objet CBindStatusCallback
est templaté sur la classe de cet objet.
CBindStatusCallback ::m_spBindCtx
Pointeur vers une interface IBindCtx qui fournit l’accès au contexte de liaison (objet qui stocke des informations sur une opération de liaison moniker particulière).
CComPtr<IBindCtx> m_spBindCtx;
Notes
Initialisé en StartAsyncDownload
.
CBindStatusCallback ::m_spBinding
Pointeur vers l’interface IBinding
de l’opération de liaison actuelle.
CComPtr<IBinding> m_spBinding;
Notes
Initialisé dans OnStartBinding
et libéré dans OnStopBinding
.
CBindStatusCallback ::m_spMoniker
Pointeur vers l’interface IMoniker à utiliser pour l’URL.
CComPtr<IMoniker> m_spMoniker;
Notes
Initialisé en StartAsyncDownload
.
CBindStatusCallback ::m_spStream
Pointeur vers l’interface IStream de l’opération de liaison actuelle.
CComPtr<IStream> m_spStream;
Notes
Initialisé à OnDataAvailable
partir de la STGMEDIUM
structure lorsque l’indicateur BCSF est BCSF_FIRSTDATANOTIFICATION et libéré lorsque l’indicateur BCSF est BCSF_LASTDATANOTIFICATION.
CBindStatusCallback ::OnDataAvailable
Les appels OnDataAvailable
moniker asynchrones fournis par le système pour fournir des données à l’objet au fur et à mesure qu’il devient disponible.
STDMETHOD(
OnDataAvailable)(DWORD grfBSCF,
DWORD dwSize,
FORMATETC* /* pformatetc */,
STGMEDIUM* pstgmed);
Paramètres
grfBSCF
[in] Valeur d’énumération BSCF. Une ou plusieurs des options suivantes : BSCF_FIRSTDATANOTIFICATION, BSCF_INTERMEDIARYDATANOTIFICATION ou BSCF_LASTDATANOTIFICATION.
dwSize
[in] Quantité cumulative (en octets) de données disponibles depuis le début de la liaison. Peut être égal à zéro, indiquant que la quantité de données n’est pas pertinente ou qu’aucune quantité spécifique n’est devenue disponible.
pformatetc
[in] Pointeur vers la structure FORMATETC qui contient le format des données disponibles. S’il n’existe aucun format, il peut être CF_NULL.
pstgmed
[in] Pointeur vers la structure STGMEDIUM qui contient les données réelles maintenant disponibles.
Valeur de retour
Une des valeurs HRESULT standard.
Notes
OnDataAvailable
lit les données, puis appelle une méthode de la classe de votre objet (par exemple, pour stocker les données ou l’imprimer à l’écran). Pour plus d’informations, consultez CBindStatusCallback ::StartAsyncDownload .
CBindStatusCallback ::OnLowResource
Appelé quand les ressources sont faibles.
STDMETHOD(OnLowResource)(DWORD /* dwReserved */);
Paramètres
dwReserved
Réservé.
Valeur de retour
Retourne S_OK.
CBindStatusCallback ::OnObjectAvailable
Appelé par le moniker asynchrone pour passer un pointeur d’interface objet à votre application.
STDMETHOD(OnObjectAvailable)(REFID /* riid */, IUnknown* /* punk */);
Paramètres
riid
Identificateur d’interface de l’interface demandée. Inutilisé.
punk
Adresse de l’interface IUnknown. Inutilisé.
Valeur de retour
Retourne S_OK.
CBindStatusCallback ::OnProgress
Appelé pour indiquer la progression d’un processus de téléchargement de données.
STDMETHOD(OnProgress)(
ULONG /* ulProgress */,
ULONG /* ulProgressMax */,
ULONG /* ulStatusCode */,
LPCWSTRONG /* szStatusText */);
Paramètres
ulProgress
Entier long non signé. Inutilisé.
ulProgressMax
Entier long non signé inutilisé.
ulStatusCode
Entier long non signé. Inutilisé.
szStatusText
Adresse d’une valeur de chaîne. Inutilisé.
Valeur de retour
Retourne S_OK.
CBindStatusCallback ::OnStartBinding
Définit le membre de données m_spBinding au IBinding
pointeur dans pBinding.
STDMETHOD(OnStartBinding)(DWORD /* dwReserved */, IBinding* pBinding);
Paramètres
dwReserved
Réservé pour un usage futur.
pBinding
[in] Adresse de l’interface IBinding de l’opération de liaison actuelle. Il ne peut pas s’agir de NULL. Le client doit appeler AddRef sur ce pointeur pour conserver une référence à l’objet de liaison.
CBindStatusCallback ::OnStopBinding
Libère le IBinding
pointeur dans le membre de données m_spBinding.
STDMETHOD(OnStopBinding)(HRESULT hresult, LPCWSTR /* szError */);
Paramètres
hresult
Code d’état retourné à partir de l’opération de liaison.
szError
Adresse d’une valeur de chaîne. Inutilisé.
Notes
Appelé par le moniker asynchrone fourni par le système pour indiquer la fin de l’opération de liaison.
CBindStatusCallback ::StartAsyncDownload
Commence à télécharger des données de manière asynchrone à partir de l’URL spécifiée.
HRESULT StartAsyncDownload(
T* pT,
ATL_PDATAAVAILABLE pFunc,
BSTR bstrURL,
IUnknown* pUnkContainer = NULL,
BOOL bRelative = FALSE);
Paramètres
Pt
[in] Pointeur vers l’objet demandant le transfert de données asynchrone. L’objet CBindStatusCallback
est templaté sur la classe de cet objet.
pFunc
[in] Pointeur vers la fonction qui reçoit les données lues. La fonction est membre de la classe de type T
de votre objet. Consultez les remarques relatives à la syntaxe et à un exemple.
bstrURL
[in] URL à partir de laquelle obtenir des données. Il peut s’agir d’une URL ou d’un nom de fichier valide. Ne peut pas avoir la valeur NULL. Par exemple :
CComBSTR mybstr =_T("http://somesite/data.htm")
pUnkContainer
[in] Du IUnknown
conteneur. NULL par défaut.
bRelative
[in] Indicateur indiquant si l’URL est relative ou absolue. FALSE par défaut, ce qui signifie que l’URL est absolue.
Valeur de retour
Une des valeurs HRESULT standard.
Notes
Chaque fois que les données sont disponibles, elles sont envoyées à l’objet via OnDataAvailable
. OnDataAvailable
lit les données et appelle la fonction pointée par pFunc (par exemple, pour stocker les données ou l’imprimer à l’écran).
La fonction pointée par pFunc est membre de la classe de votre objet et a la syntaxe suivante :
void Function_Name(
CBindStatusCallback<T>* pbsc,
BYTE* pBytes,
DWORD dwSize);
Dans l’exemple suivant (extrait de l’exemple ASYNC ), la fonction OnData
écrit les données reçues dans une zone de texte.
Exemple
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!!!"));
}
}
}