Share via


CBindStatusCallback-klasse

Opmerking

De ATL (Active Template Library) wordt nog steeds ondersteund. We voegen echter geen functies meer toe of werken de documentatie bij.

Met deze klasse wordt de IBindStatusCallback-interface geïmplementeerd.

Belangrijk

Deze klasse en de bijbehorende leden kunnen niet worden gebruikt in toepassingen die worden uitgevoerd in Windows Runtime.

Syntaxis

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>

Parameterwaarden

T
Uw klasse met de functie die wordt aangeroepen als de gegevens worden ontvangen.

nBindFlags
Hiermee geeft u de bindingsvlagmen op die worden geretourneerd door GetBindInfo. De standaard implementatie stelt de binding in op asynchroon, haalt de nieuwste versie van het gegevens/object op en slaat de opgehaalde gegevens niet op in de schijfcache.

Leden

Openbare constructors

Naam Description
CBindStatusCallback::CBindStatusCallback De constructor.
CBindStatusCallback::~CBindStatusCallback De destructor.

Openbare methoden

Naam Description
CBindStatusCallback::D ownload Statische methode waarmee het downloadproces wordt gestart, een CBindStatusCallback object wordt gemaakt en aangeroepen StartAsyncDownload.
CBindStatusCallback::GetBindInfo Aangeroepen door de asynchrone moniker om informatie op te vragen over het type binding dat moet worden gemaakt.
CBindStatusCallback::GetPriority Aangeroepen door de asynchrone moniker om de prioriteit van de bindingsbewerking op te halen. De ATL-implementatie retourneert E_NOTIMPL.
CBindStatusCallback::OnDataAvailable Wordt aangeroepen om gegevens aan uw toepassing te verstrekken zodra deze beschikbaar is. Leest de gegevens en roept vervolgens de functie aan die eraan is doorgegeven om de gegevens te gebruiken.
CBindStatusCallback::OnLowResource Wordt aangeroepen wanneer resources laag zijn. De ATL-implementatie retourneert S_OK.
CBindStatusCallback::OnObjectAvailable Aangeroepen door de asynchrone moniker om een objectinterfaceaanwijzer door te geven aan uw toepassing. De ATL-implementatie retourneert S_OK.
CBindStatusCallback::OnProgress Wordt aangeroepen om de voortgang van een proces voor het downloaden van gegevens aan te geven. De ATL-implementatie retourneert S_OK.
CBindStatusCallback::OnStartBinding Aangeroepen wanneer binding wordt gestart.
CBindStatusCallback::OnStopBinding Aangeroepen wanneer de asynchrone gegevensoverdracht wordt gestopt.
CBindStatusCallback::StartAsyncDownload Initialiseert de beschikbare bytes en bytes die naar nul worden gelezen, maakt een push-type stroomobject op basis van een URL en roept OnDataAvailable telkens aan wanneer gegevens beschikbaar zijn.

Publieke dataleden

Naam Description
CBindStatusCallback::m_dwAvailableToRead Aantal bytes dat kan worden gelezen.
CBindStatusCallback::m_dwTotalRead Totaal aantal bytes gelezen.
CBindStatusCallback::m_pFunc Aanwijzer naar de functie die wordt aangeroepen wanneer gegevens beschikbaar zijn.
CBindStatusCallback::m_pT Wijs het object aan dat de asynchrone gegevensoverdracht aanvraagt.
CBindStatusCallback::m_spBindCtx Aanwijzer naar de IBindCtx-interface voor de huidige bindingsbewerking.
CBindStatusCallback::m_spBinding Wijs de interface voor de IBinding huidige bindingsbewerking aan.
CBindStatusCallback::m_spMoniker Wijs de IMoniker-interface aan voor de URL die moet worden gebruikt.
CBindStatusCallback::m_spStream Wijs de IStream-interface voor de gegevensoverdracht aan.

Opmerkingen

Met de klasse CBindStatusCallback wordt de IBindStatusCallback-interface geïmplementeerd. IBindStatusCallback moet door uw toepassing worden geïmplementeerd, zodat deze meldingen kan ontvangen van een asynchrone gegevensoverdracht. De asynchrone moniker die door het systeem wordt geleverd, gebruikt IBindStatusCallback methoden voor het verzenden en ontvangen van informatie over de asynchrone gegevensoverdracht naar en van uw object.

Normaal gesproken is het CBindStatusCallback object gekoppeld aan een specifieke bindingsbewerking. Wanneer u bijvoorbeeld in het ASYNC-voorbeeld de URL-eigenschap instelt, wordt er een CBindStatusCallback object gemaakt in de aanroep naar 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;
}

De asynchrone moniker gebruikt de callback-functie OnData om uw toepassing aan te roepen wanneer deze gegevens bevat. De asynchrone moniker wordt geleverd door het systeem.

Overnamehiërarchie

CComObjectRootBase

IBindStatusCallback

CComObjectRootEx

CBindStatusCallback

Requirements

Koptekst: atlctl.h

CBindStatusCallback::CBindStatusCallback

De constructor.

CBindStatusCallback();

Opmerkingen

Hiermee maakt u een object voor het ontvangen van meldingen over de asynchrone gegevensoverdracht. Normaal gesproken wordt er één object gemaakt voor elke bindingsbewerking.

De constructor initialiseert ook m_pT en m_pFunc naar NULL.

CBindStatusCallback::~CBindStatusCallback

De destructor.

~CBindStatusCallback();

Opmerkingen

Alle toegewezen resources worden vrijgemaakt.

CBindStatusCallback::D ownload

Hiermee maakt u een CBindStatusCallback object en roept u StartAsyncDownload aan om gegevens asynchroon te downloaden vanaf de opgegeven URL.

static HRESULT Download(
    T* pT,
    ATL_PDATAAVAILABLE pFunc,
    BSTR bstrURL,
    IUnknown* pUnkContainer = NULL,
    BOOL bRelative = FALSE);

Parameterwaarden

Pt
[in] Een aanwijzer naar het object dat de asynchrone gegevensoverdracht aanvraagt. Het CBindStatusCallback object wordt templatized op de klasse van dit object.

pFunc
[in] Een aanwijzer naar de functie die de gegevens ontvangt die worden gelezen. De functie is lid van de klasse van het object van het type T. Zie StartAsyncDownload voor syntaxis en een voorbeeld.

bstrURL
[in] De URL waaruit gegevens moeten worden opgehaald. Dit kan elke geldige URL of bestandsnaam zijn. Kan niet NULL zijn. Voorbeeld:

CComBSTR mybstr =_T("http://somesite/data.htm")

pUnkContainer
[in] De IUnknown container. NULL standaard.

bRelative
[in] Een vlag die aangeeft of de URL relatief of absoluut is. STANDAARD ONWAAR, wat betekent dat de URL absoluut is.

Retourwaarde

Een van de standaard HRESULT-waarden.

Opmerkingen

Telkens wanneer gegevens beschikbaar zijn, worden deze verzonden naar het object via OnDataAvailable. OnDataAvailable leest de gegevens en roept de functie aan die door pFunc wordt verwezen (bijvoorbeeld om de gegevens op te slaan of af te drukken op het scherm).

CBindStatusCallback::GetBindInfo

Wordt aangeroepen om de moniker te vertellen hoe ze moeten binden.

STDMETHOD(GetBindInfo)(
    DWORD* pgrfBSCF,
    BINDINFO* pbindinfo);

Parameterwaarden

pgrfBSCF
[uit] Een aanwijzer naar BINDF-opsommingswaarden die aangeven hoe de bindingsbewerking moet plaatsvinden. Standaard ingesteld met de volgende opsommingswaarden:

BINDF_ASYNCHRONOUS Asynchrone download.

OnDataAvailable BINDF_ASYNCSTORAGE retourneert E_PENDING wanneer gegevens nog niet beschikbaar zijn in plaats van te blokkeren totdat gegevens beschikbaar zijn.

BINDF_GETNEWESTVERSION De bindingsbewerking moet de nieuwste versie van de gegevens ophalen.

BINDF_NOWRITECACHE De bindingsbewerking mag geen opgehaalde gegevens opslaan in de schijfcache.

pbindinfo
[in, uit] Een aanwijzer naar de BINDINFO structuur die meer informatie geeft over hoe het object binding wil uitvoeren.

Retourwaarde

Een van de standaard HRESULT-waarden.

Opmerkingen

Met de standaard implementatie wordt de binding asynchroon ingesteld en wordt het gegevenspushmodel gebruikt. In het gegevenspushmodel wordt met de moniker de asynchrone bindingsbewerking aangestuurd en wordt de client continu op de hoogte gesteld wanneer er nieuwe gegevens beschikbaar zijn.

CBindStatusCallback::GetPriority

Aangeroepen door de asynchrone moniker om de prioriteit van de bindingsbewerking op te halen.

STDMETHOD(GetPriority)(LONG* pnPriority);

Parameterwaarden

pnPriority
[uit] Adres van de LONG-variabele die bij succes de prioriteit krijgt.

Retourwaarde

Retourneert E_NOTIMPL.

CBindStatusCallback::m_dwAvailableToRead

Kan worden gebruikt om het aantal beschikbare bytes op te slaan dat kan worden gelezen.

DWORD m_dwAvailableToRead;

Opmerkingen

Geïnitialiseerd tot nul in StartAsyncDownload.

CBindStatusCallback::m_dwTotalRead

Het cumulatieve totaal van bytes dat wordt gelezen in de asynchrone gegevensoverdracht.

DWORD m_dwTotalRead;

Opmerkingen

Steeds verhoogd wanneer OnDataAvailable het aantal daadwerkelijk gelezen bytes wordt aangeroepen. Geïnitialiseerd tot nul in StartAsyncDownload.

CBindStatusCallback::m_pFunc

De functie waarop wordt verwezen m_pFunc , wordt aangeroepen nadat OnDataAvailable de beschikbare gegevens zijn gelezen (bijvoorbeeld om de gegevens op te slaan of af te drukken op het scherm).

ATL_PDATAAVAILABLE m_pFunc;

Opmerkingen

De functie waarnaar wordt verwezen m_pFunc , is lid van de klasse van uw object en heeft de volgende syntaxis:

void Function_Name(
   CBindStatusCallback<T>* pbsc,
   BYTE* pBytes,
   DWORD dwSize
   );

CBindStatusCallback::m_pT

Een aanwijzer naar het object dat de asynchrone gegevensoverdracht aanvraagt.

T* m_pT;

Opmerkingen

Het CBindStatusCallback object wordt templatized op de klasse van dit object.

CBindStatusCallback::m_spBindCtx

Een aanwijzer naar een IBindCtx-interface die toegang biedt tot de bindingscontext (een object waarin informatie over een bepaalde monikerbindingsbewerking wordt opgeslagen).

CComPtr<IBindCtx> m_spBindCtx;

Opmerkingen

Geïnitialiseerd in StartAsyncDownload.

CBindStatusCallback::m_spBinding

Een aanwijzer naar de IBinding interface van de huidige bindingsbewerking.

CComPtr<IBinding> m_spBinding;

Opmerkingen

Geïnitialiseerd en OnStartBinding vrijgegeven in OnStopBinding.

CBindStatusCallback::m_spMoniker

Een aanwijzer naar de IMoniker-interface voor de URL die moet worden gebruikt.

CComPtr<IMoniker> m_spMoniker;

Opmerkingen

Geïnitialiseerd in StartAsyncDownload.

CBindStatusCallback::m_spStream

Een aanwijzer naar de IStream-interface van de huidige bindingsbewerking.

CComPtr<IStream> m_spStream;

Opmerkingen

Geïnitialiseerd vanuit OnDataAvailable de STGMEDIUM structuur wanneer de BCSF-vlag is BCSF_FIRSTDATANOTIFICATION en wordt vrijgegeven wanneer de BCSF-vlag wordt BCSF_LASTDATANOTIFICATION.

CBindStatusCallback::OnDataAvailable

De door het systeem geleverde asynchrone monikeraanroepen OnDataAvailable om gegevens aan het object te leveren zodra het beschikbaar komt.

STDMETHOD(
    OnDataAvailable)(DWORD grfBSCF,
    DWORD dwSize,
    FORMATETC* /* pformatetc */,
    STGMEDIUM* pstgmed);

Parameterwaarden

grfBSCF
[in] Een BSCF-opsommingswaarde. Een of meer van de volgende opties: BSCF_FIRSTDATANOTIFICATION, BSCF_INTERMEDIARYDATANOTIFICATION of BSCF_LASTDATANOTIFICATION.

dwSize
[in] De cumulatieve hoeveelheid gegevens (in bytes) die beschikbaar is sinds het begin van de binding. Kan nul zijn, waarmee wordt aangegeven dat de hoeveelheid gegevens niet relevant is of dat er geen specifieke hoeveelheid beschikbaar is.

pformatetc
[in] Wijs de STRUCTUUR FORMATETC aan die de indeling van de beschikbare gegevens bevat. Als er geen indeling is, kunt u CF_NULL.

pstgmed
[in] Wijs de STGMEDIUM-structuur aan die de werkelijke gegevens bevat die nu beschikbaar zijn.

Retourwaarde

Een van de standaard HRESULT-waarden.

Opmerkingen

OnDataAvailable leest de gegevens en roept vervolgens een methode van de klasse van uw object aan (bijvoorbeeld om de gegevens op te slaan of af te drukken op het scherm). Zie CBindStatusCallback::StartAsyncDownload voor meer informatie.

CBindStatusCallback::OnLowResource

Wordt aangeroepen wanneer resources laag zijn.

STDMETHOD(OnLowResource)(DWORD /* dwReserved */);

Parameterwaarden

dwReserved
Gereserveerd.

Retourwaarde

Retourneert S_OK.

CBindStatusCallback::OnObjectAvailable

Aangeroepen door de asynchrone moniker om een objectinterfaceaanwijzer door te geven aan uw toepassing.

STDMETHOD(OnObjectAvailable)(REFID /* riid */, IUnknown* /* punk */);

Parameterwaarden

riid
Interface-id van de aangevraagde interface. Unused.

Punk
Adres van de interface IUnknown. Unused.

Retourwaarde

Retourneert S_OK.

CBindStatusCallback::OnProgress

Wordt aangeroepen om de voortgang van een proces voor het downloaden van gegevens aan te geven.

STDMETHOD(OnProgress)(
    ULONG /* ulProgress */,
    ULONG /* ulProgressMax */,
    ULONG /* ulStatusCode */,
    LPCWSTRONG /* szStatusText */);

Parameterwaarden

ulProgress
Niet-ondertekend lang geheel getal. Unused.

ulProgressMax
Niet-ondertekend lang geheel getal Ongebruikt.

ulStatusCode
Niet-ondertekend lang geheel getal. Unused.

szStatusText
Adres van een tekenreekswaarde. Unused.

Retourwaarde

Retourneert S_OK.

CBindStatusCallback::OnStartBinding

Hiermee stelt u het gegevenslid m_spBinding in op de IBinding aanwijzer in pBinding.

STDMETHOD(OnStartBinding)(DWORD /* dwReserved */, IBinding* pBinding);

Parameterwaarden

dwReserved
Gereserveerd voor toekomstig gebruik.

pBinding
[in] Adres van de IBinding-interface van de huidige bindingsbewerking. Dit kan niet NULL zijn. De client moet AddRef op deze aanwijzer aanroepen om een verwijzing naar het bindingsobject te behouden.

CBindStatusCallback::OnStopBinding

Hiermee wordt de IBinding aanwijzer in het gegevenslid m_spBinding vrijgegeven.

STDMETHOD(OnStopBinding)(HRESULT hresult, LPCWSTR /* szError */);

Parameterwaarden

hresult-
Statuscode geretourneerd door de bindingsbewerking.

szError
Adres van een tekenreekswaarde. Unused.

Opmerkingen

Aangeroepen door de door het systeem geleverde asynchrone moniker om het einde van de bindingsbewerking aan te geven.

CBindStatusCallback::StartAsyncDownload

Begint met het asynchroon downloaden van gegevens uit de opgegeven URL.

HRESULT StartAsyncDownload(
    T* pT,
    ATL_PDATAAVAILABLE pFunc,
    BSTR bstrURL,
    IUnknown* pUnkContainer = NULL,
    BOOL bRelative = FALSE);

Parameterwaarden

Pt
[in] Een aanwijzer naar het object dat de asynchrone gegevensoverdracht aanvraagt. Het CBindStatusCallback object wordt templatized op de klasse van dit object.

pFunc
[in] Een aanwijzer naar de functie die de gegevens ontvangt die worden gelezen. De functie is lid van de klasse van het object van het type T. Zie Opmerkingen voor syntaxis en een voorbeeld.

bstrURL
[in] De URL waaruit gegevens moeten worden opgehaald. Dit kan elke geldige URL of bestandsnaam zijn. Kan niet NULL zijn. Voorbeeld:

CComBSTR mybstr =_T("http://somesite/data.htm")

pUnkContainer
[in] De IUnknown container. NULL standaard.

bRelative
[in] Een vlag die aangeeft of de URL relatief of absoluut is. STANDAARD ONWAAR, wat betekent dat de URL absoluut is.

Retourwaarde

Een van de standaard HRESULT-waarden.

Opmerkingen

Telkens wanneer gegevens beschikbaar zijn, worden deze verzonden naar het object via OnDataAvailable. OnDataAvailable leest de gegevens en roept de functie aan die door pFunc wordt verwezen (bijvoorbeeld om de gegevens op te slaan of af te drukken op het scherm).

De functie waarnaar wordt verwezen door pFunc is lid van de klasse van uw object en heeft de volgende syntaxis:

void Function_Name(
    CBindStatusCallback<T>* pbsc,
    BYTE* pBytes,
    DWORD dwSize);

In het volgende voorbeeld (uit het ASYNC-voorbeeld ) schrijft de functie OnData de ontvangen gegevens naar een tekstvak.

Example

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

Zie ook

Overzicht van klassen