Sdílet prostřednictvím


CBindStatusCallback – třída

Tato třída implementuje IBindStatusCallback rozhraní.

Důležité

Tuto třídu a její členy nelze použít v aplikacích, které se spouští v prostředí 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>

Parametry

T
Vaše třída obsahující funkci, která bude volána při přijetí dat.

nBindFlags
Určuje příznaky vazby, které vrací GetBindInfo. Výchozí implementace nastaví vazbu na asynchronní, načte nejnovější verzi dat nebo objektu a neukládá načtená data do mezipaměti disku.

Členové

Veřejné konstruktory

Název Popis
CBindStatusCallback::CBindStatusCallback Konstruktor
CBindStatusCallback::~CBindStatusCallback Destruktor.

Veřejné metody

Název Popis
CBindStatusCallback::D ownload Statická metoda, která spustí proces stahování, vytvoří CBindStatusCallback objekt a volá StartAsyncDownload.
CBindStatusCallback::GetBindInfo Volá se asynchronním monikerem k vyžádání informací o typu vazby, která se má vytvořit.
CBindStatusCallback::GetPriority Zavolá se asynchronním monikerem, který získá prioritu operace vazby. Implementace ATL vrátí E_NOTIMPL.
CBindStatusCallback::OnDataAvailable Volá se k poskytování dat vaší aplikaci, jakmile budou k dispozici. Načte data a potom zavolá funkci předanou k použití dat.
CBindStatusCallback::OnLowResource Volá se, když jsou prostředky nízké. Implementace ATL vrátí S_OK.
CBindStatusCallback::OnObjectAvailable Volá se asynchronním monikerem pro předání ukazatele rozhraní objektu do vaší aplikace. Implementace ATL vrátí S_OK.
CBindStatusCallback::OnProgress Volá se k označení průběhu procesu stahování dat. Implementace ATL vrátí S_OK.
CBindStatusCallback::OnStartBinding Volá se při spuštění vazby.
CBindStatusCallback::OnStopBinding Volá se při zastavení asynchronního přenosu dat.
CBindStatusCallback::StartAsyncDownload Inicializuje bajty dostupné a bajty přečtené na nulu, vytvoří objekt streamu typu push z adresy URL a volání OnDataAvailable pokaždé, když jsou k dispozici data.

Veřejné datové členy

Název Popis
CBindStatusCallback::m_dwAvailableToRead Počet bajtů dostupných ke čtení
CBindStatusCallback::m_dwTotalRead Celkový počet přečtených bajtů
CBindStatusCallback::m_pFunc Ukazatel na funkci volanou v případech, kdy jsou data k dispozici.
CBindStatusCallback::m_pT Ukazatel na objekt, který požaduje asynchronní přenos dat.
CBindStatusCallback::m_spBindCtx Ukazatel na rozhraní IBindCtx pro aktuální operaci vazby.
CBindStatusCallback::m_spBinding Ukazatel na IBinding rozhraní pro aktuální operaci vazby.
CBindStatusCallback::m_spMoniker Ukazatel na rozhraní IMoniker pro adresu URL, která se má použít.
CBindStatusCallback::m_spStream Ukazatel na rozhraní IStream pro přenos dat.

Poznámky

Třída CBindStatusCallback implementuje rozhraní IBindStatusCallback. IBindStatusCallback musí být implementována vaší aplikací, aby mohl přijímat oznámení z asynchronního přenosu dat. Asynchronní moniker poskytovaný systémem používá IBindStatusCallback metody k odesílání a přijímání informací o asynchronním přenosu dat do a z objektu.

Objekt je obvykle přidružen ke konkrétní operaci vazby CBindStatusCallback . Například v ukázce ASYNC při nastavení vlastnosti URL vytvoří CBindStatusCallback objekt ve volání Downloadna:

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;
}

Asynchronní moniker používá funkci OnData zpětného volání k volání aplikace, pokud obsahuje data. Asynchronní moniker poskytuje systém.

Hierarchie dědičnosti

CComObjectRootBase

IBindStatusCallback

CComObjectRootEx

CBindStatusCallback

Požadavky

Hlavička: atlctl.h

CBindStatusCallback::CBindStatusCallback

Konstruktor

CBindStatusCallback();

Poznámky

Vytvoří objekt pro příjem oznámení týkajících se asynchronního přenosu dat. Obvykle se vytvoří jeden objekt pro každou operaci vazby.

Konstruktor také inicializuje m_pT a m_pFunc na HODNOTU NULL.

CBindStatusCallback::~CBindStatusCallback

Destruktor.

~CBindStatusCallback();

Poznámky

Uvolní všechny přidělené prostředky.

CBindStatusCallback::D ownload

CBindStatusCallback Vytvoří objekt a volání StartAsyncDownload pro zahájení asynchronního stahování dat ze zadané adresy URL.

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

Parametry

Pt
[v] Ukazatel na objekt, který požaduje asynchronní přenos dat. Objekt CBindStatusCallback je templatizován v této třídě objektu.

pFunc
[v] Ukazatel na funkci, která přijímá načtená data. Funkce je členem třídy typu Tobjektu . Syntaxi a příklad najdete v části StartAsyncDownload .

bstrURL
[v] Adresa URL pro získání dat. Může to být libovolná platná adresa URL nebo název souboru. Nesmí mít hodnotu NULL. Příklad:

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

pUnkContainer
[v] Kontejner IUnknown . Ve výchozím nastavení má hodnotu NULL.

bRelative
[v] Příznak označující, jestli je adresa URL relativní nebo absolutní. NEPRAVDA ve výchozím nastavení, což znamená, že adresa URL je absolutní.

Návratová hodnota

Jedna ze standardních hodnot HRESULT.

Poznámky

Pokaždé, když jsou data k dispozici, jsou odeslány do objektu prostřednictvím OnDataAvailable. OnDataAvailable čte data a volá funkci, na kterou odkazuje pFunc (například pro uložení dat nebo jejich tisk na obrazovku).

CBindStatusCallback::GetBindInfo

Volali, aby řekli monikerovi, jak vytvořit vazbu.

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

Parametry

pgrfBSCF
[ven] Ukazatel na hodnoty výčtu BINDF označující, jak má operace vazby nastat. Ve výchozím nastavení nastavte následující hodnoty výčtu:

BINDF_ASYNCHRONOUS asynchronní stahování.

OnDataAvailable BINDF_ASYNCSTORAGE vrátí E_PENDING, pokud data ještě nejsou k dispozici, a neblokují, dokud nebudou data k dispozici.

BINDF_GETNEWESTVERSION Operace vazby by měla načíst nejnovější verzi dat.

BINDF_NOWRITECACHE Operace vazby by neměla ukládat načtená data do mezipaměti disku.

pbindinfo
[in, out] Ukazatel na BINDINFO strukturu poskytující další informace o tom, jak objekt chce vytvořit vazbu.

Návratová hodnota

Jedna ze standardních hodnot HRESULT.

Poznámky

Výchozí implementace nastaví vazbu tak, aby byla asynchronní, a aby používala model nabízených oznámení dat. V modelu nabízených oznámení dat moniker řídí asynchronní operaci vazby a nepřetržitě upozorní klienta vždy, když jsou k dispozici nová data.

CBindStatusCallback::GetPriority

Zavolá se asynchronním monikerem, který získá prioritu operace vazby.

STDMETHOD(GetPriority)(LONG* pnPriority);

Parametry

pnPriority
[ven] Adresa proměnné LONG , která při úspěchu obdrží prioritu.

Návratová hodnota

Vrátí E_NOTIMPL.

CBindStatusCallback::m_dwAvailableToRead

Lze použít k uložení počtu bajtů, které lze číst.

DWORD m_dwAvailableToRead;

Poznámky

Inicializováno na nulu v StartAsyncDownload.

CBindStatusCallback::m_dwTotalRead

Kumulativní součet bajtů přečtených v asynchronním přenosu dat.

DWORD m_dwTotalRead;

Poznámky

Při každém OnDataAvailable zvýšení se volá počet bajtů, které se skutečně čtou. Inicializováno na nulu v StartAsyncDownload.

CBindStatusCallback::m_pFunc

Funkce, na kterou m_pFunc odkazuje, je volána OnDataAvailable po přečtení dostupných dat (například pro uložení dat nebo jejich vytištění na obrazovku).

ATL_PDATAAVAILABLE m_pFunc;

Poznámky

Funkce, na kterou m_pFunc odkazuje, je členem třídy objektu a má následující syntaxi:

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

CBindStatusCallback::m_pT

Ukazatel na objekt, který požaduje asynchronní přenos dat.

T* m_pT;

Poznámky

Objekt CBindStatusCallback je templatizován v této třídě objektu.

CBindStatusCallback::m_spBindCtx

Ukazatel na rozhraní IBindCtx , které poskytuje přístup k kontextu vazby (objekt, který ukládá informace o konkrétní operaci vazby monikeru).

CComPtr<IBindCtx> m_spBindCtx;

Poznámky

Inicializován v StartAsyncDownload.

CBindStatusCallback::m_spBinding

Ukazatel na IBinding rozhraní aktuální operace vazby.

CComPtr<IBinding> m_spBinding;

Poznámky

Inicializován a OnStartBinding vydán v OnStopBinding.

CBindStatusCallback::m_spMoniker

Ukazatel na rozhraní IMoniker pro adresu URL, která se má použít.

CComPtr<IMoniker> m_spMoniker;

Poznámky

Inicializován v StartAsyncDownload.

CBindStatusCallback::m_spStream

Ukazatel na rozhraní IStream aktuální operace vazby.

CComPtr<IStream> m_spStream;

Poznámky

Inicializováno OnDataAvailable ze STGMEDIUM struktury, když je příznak BCSF BCSF_FIRSTDATANOTIFICATION a uvolněn, když je příznak BCSF BCSF_LASTDATANOTIFICATION.

CBindStatusCallback::OnDataAvailable

Volání asynchronního monikeru OnDataAvailable zadaného systémem k poskytnutí dat objektu, jakmile bude k dispozici.

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

Parametry

grfBSCF
[v] Hodnota výčtu BSCF. Jednu nebo více z následujících možností: BSCF_FIRSTDATANOTIFICATION, BSCF_INTERMEDIARYDATANOTIFICATION nebo BSCF_LASTDATANOTIFICATION.

dwSize
[v] Kumulativní množství (v bajtech) dat dostupných od začátku vazby. Může být nula, což znamená, že množství dat není relevantní nebo že nebyla k dispozici žádná konkrétní částka.

pformatetc
[v] Ukazatel na strukturu FORMATETC , která obsahuje formát dostupných dat. Pokud neexistuje žádný formát, může být CF_NULL.

pstgmed
[v] Ukazatel na strukturu STGMEDIUM , která obsahuje skutečná data nyní k dispozici.

Návratová hodnota

Jedna ze standardních hodnot HRESULT.

Poznámky

OnDataAvailable přečte data a potom zavolá metodu třídy objektu (například pro uložení dat nebo jejich tisk na obrazovku). Podrobnosti najdete v části CBindStatusCallback::StartAsyncDownload.

CBindStatusCallback::OnLowResource

Volá se, když jsou prostředky nízké.

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

Parametry

dwReserved
Vyhrazeno.

Návratová hodnota

Vrátí S_OK.

CBindStatusCallback::OnObjectAvailable

Volá se asynchronním monikerem pro předání ukazatele rozhraní objektu do vaší aplikace.

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

Parametry

riid
Identifikátor rozhraní požadovaného rozhraní. Nepoužívá se.

punk
Adresa rozhraní IUnknown. Nepoužívá se.

Návratová hodnota

Vrátí S_OK.

CBindStatusCallback::OnProgress

Volá se k označení průběhu procesu stahování dat.

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

Parametry

ulProgress
Celé číslo bez znaménka Nepoužívá se.

ulProgressMax
Nepoužité celé číslo bez znaménka

ulStatusCode
Celé číslo bez znaménka Nepoužívá se.

szStatusText
Adresa řetězcové hodnoty Nepoužívá se.

Návratová hodnota

Vrátí S_OK.

CBindStatusCallback::OnStartBinding

Nastaví datový člen m_spBinding na IBinding ukazatel v nástroji pBinding.

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

Parametry

dwReserved
Vyhrazeno pro budoucí použití.

pBinding
[v] Adresa rozhraní IBinding aktuální operace vazby. Nesmí to být NULL. Klient by měl na tomto ukazateli volat AddRef, aby odkaz na objekt vazby.

CBindStatusCallback::OnStopBinding

IBinding Uvolní ukazatel v m_spBinding datového členu.

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

Parametry

hresult
Stavový kód vrácený z operace vazby.

szError
Adresa řetězcové hodnoty Nepoužívá se.

Poznámky

Volané systémovým asynchronním monikerem označující konec operace vazby.

CBindStatusCallback::StartAsyncDownload

Začne stahovat data asynchronně ze zadané adresy URL.

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

Parametry

Pt
[v] Ukazatel na objekt, který požaduje asynchronní přenos dat. Objekt CBindStatusCallback je templatizován v této třídě objektu.

pFunc
[v] Ukazatel na funkci, která přijímá data, která se čtou. Funkce je členem třídy typu Tobjektu . Viz Poznámky pro syntaxi a příklad.

bstrURL
[v] Adresa URL pro získání dat. Může to být libovolná platná adresa URL nebo název souboru. Nesmí mít hodnotu NULL. Příklad:

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

pUnkContainer
[v] Kontejner IUnknown . Ve výchozím nastavení má hodnotu NULL.

bRelative
[v] Příznak označující, jestli je adresa URL relativní nebo absolutní. NEPRAVDA ve výchozím nastavení, což znamená, že adresa URL je absolutní.

Návratová hodnota

Jedna ze standardních hodnot HRESULT.

Poznámky

Pokaždé, když jsou data k dispozici, jsou odeslány do objektu prostřednictvím OnDataAvailable. OnDataAvailable čte data a volá funkci, na kterou odkazuje pFunc (například pro uložení dat nebo jejich tisk na obrazovku).

Funkce, na kterou odkazuje pFunc , je členem třídy objektu a má následující syntaxi:

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

V následujícím příkladu (převzato z ukázky ASYNC ) funkce OnData zapíše přijatá data do textového pole.

Příklad

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

Viz také

Přehled třídy