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í Download
na:
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
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 T
objektu . 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 T
objektu . 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!!!"));
}
}
}