Klasa CBindStatusCallback
Ta klasa implementuje IBindStatusCallback
interfejs.
Ważne
Tej klasy i jej składowych nie można używać w aplikacjach wykonywanych w środowisko wykonawcze systemu Windows.
Składnia
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
Klasa zawierająca funkcję, która zostanie wywołana jako odebrane dane.
nBindFlags
Określa flagi powiązania, które są zwracane przez GetBindInfo. Domyślna implementacja ustawia powiązanie jako asynchroniczne, pobiera najnowszą wersję danych/obiektu i nie przechowuje pobranych danych w pamięci podręcznej dysku.
Elementy członkowskie
Konstruktory publiczne
Nazwa/nazwisko | opis |
---|---|
CBindStatusCallback::CBindStatusCallback | Konstruktor. |
CBindStatusCallback::~CBindStatusCallback | Destruktora. |
Metody publiczne
Nazwa/nazwisko | opis |
---|---|
CBindStatusCallback::D ownload | Metoda statyczna, która uruchamia proces pobierania, tworzy obiekt i wywołuje metodę CBindStatusCallback StartAsyncDownload . |
CBindStatusCallback::GetBindInfo | Wywoływana przez asynchroniczny moniker w celu żądania informacji o typie powiązania, który ma zostać utworzony. |
CBindStatusCallback::GetPriority | Wywoływana przez asynchroniczny moniker w celu uzyskania priorytetu operacji powiązania. Implementacja ATL zwraca wartość E_NOTIMPL . |
CBindStatusCallback::OnDataAvailable | Wywoływana w celu udostępnienia danych aplikacji w miarę ich udostępniania. Odczytuje dane, a następnie wywołuje przekazaną do niej funkcję w celu użycia danych. |
CBindStatusCallback::OnLowResource | Wywoływane, gdy zasoby są niskie. Implementacja ATL zwraca S_OK. |
CBindStatusCallback::OnObjectAvailable | Wywoływana przez asynchroniczny moniker w celu przekazania wskaźnika interfejsu obiektu do aplikacji. Implementacja ATL zwraca S_OK. |
CBindStatusCallback::OnProgress | Wywołana w celu wskazania postępu procesu pobierania danych. Implementacja ATL zwraca S_OK. |
CBindStatusCallback::OnStartBinding | Wywoływana po uruchomieniu powiązania. |
CBindStatusCallback::OnStopBinding | Wywoływana po zatrzymaniu asynchronicznego transferu danych. |
CBindStatusCallback::StartAsyncDownload | Inicjuje dostępne bajty i bajty odczytane do zera, tworzy obiekt strumienia typu wypychania z adresu URL, a wywołania OnDataAvailable za każdym razem, gdy dane są dostępne. |
Publiczne elementy członkowskie danych
Nazwa/nazwisko | opis |
---|---|
CBindStatusCallback::m_dwAvailableToRead | Liczba bajtów dostępnych do odczytu. |
CBindStatusCallback::m_dwTotalRead | Całkowita liczba odczytanych bajtów. |
CBindStatusCallback::m_pFunc | Wskaźnik do funkcji wywoływanej, gdy dane są dostępne. |
CBindStatusCallback::m_pT | Wskaźnik do obiektu żądającego asynchronicznego transferu danych. |
CBindStatusCallback::m_spBindCtx | Wskaźnik do interfejsu IBindCtx dla bieżącej operacji powiązania. |
CBindStatusCallback::m_spBinding | Wskaźnik do interfejsu IBinding dla bieżącej operacji powiązania. |
CBindStatusCallback::m_spMoniker | Wskaźnik do interfejsu IMoniker adresu URL do użycia. |
CBindStatusCallback::m_spStream | Wskaźnik do interfejsu IStream dla transferu danych. |
Uwagi
Klasa CBindStatusCallback
implementuje interfejs IBindStatusCallback
. IBindStatusCallback
aplikacja musi być zaimplementowana przez aplikację, aby mogła odbierać powiadomienia z asynchronicznego transferu danych. Asynchroniczny moniker dostarczony przez system używa IBindStatusCallback
metod do wysyłania i odbierania informacji o asynchronicznym transferze danych do i z obiektu.
CBindStatusCallback
Zazwyczaj obiekt jest skojarzony z określoną operacją powiązania. Na przykład w przykładzie ASYNC po ustawieniu właściwości URL tworzy CBindStatusCallback
obiekt w wywołaniu metody 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;
}
Asynchroniczny moniker używa funkcji OnData
wywołania zwrotnego do wywoływania aplikacji, gdy zawiera dane. Asynchroniczny moniker jest dostarczany przez system.
Hierarchia dziedziczenia
CComObjectRootBase
IBindStatusCallback
CBindStatusCallback
Wymagania
Nagłówek: atlctl.h
CBindStatusCallback::CBindStatusCallback
Konstruktor.
CBindStatusCallback();
Uwagi
Tworzy obiekt do odbierania powiadomień dotyczących asynchronicznego transferu danych. Zazwyczaj jeden obiekt jest tworzony dla każdej operacji powiązania.
Konstruktor inicjuje również m_pT i m_pFunc do wartości NULL.
CBindStatusCallback::~CBindStatusCallback
Destruktora.
~CBindStatusCallback();
Uwagi
Zwalnia wszystkie przydzielone zasoby.
CBindStatusCallback::D ownload
Tworzy obiekt i wywołuje metodę CBindStatusCallback
StartAsyncDownload
, aby rozpocząć pobieranie danych asynchronicznie z określonego adresu URL.
static HRESULT Download(
T* pT,
ATL_PDATAAVAILABLE pFunc,
BSTR bstrURL,
IUnknown* pUnkContainer = NULL,
BOOL bRelative = FALSE);
Parametry
Pt
[in] Wskaźnik do obiektu żądającego asynchronicznego transferu danych. Obiekt CBindStatusCallback
jest templatized w klasie tego obiektu.
funkcja pFunc
[in] Wskaźnik do funkcji, która odbiera odczytane dane. Funkcja jest składową klasy obiektu typu T
. Zobacz StartAsyncDownload , aby uzyskać składnię i przykład.
bstrURL
[in] Adres URL do uzyskiwania danych. Może to być dowolny prawidłowy adres URL lub nazwa pliku. Nie można mieć wartości NULL. Na przykład:
CComBSTR mybstr =_T("http://somesite/data.htm")
pUnkContainer
[in] Kontener IUnknown
. Wartość NULL domyślnie.
BRelative
[in] Flaga wskazująca, czy adres URL jest względny, czy bezwzględny. Wartość FALSE domyślnie oznacza, że adres URL jest bezwzględny.
Wartość zwracana
Jedna ze standardowych wartości HRESULT.
Uwagi
Za każdym razem, gdy dane są dostępne, są wysyłane do obiektu za pośrednictwem OnDataAvailable
elementu . OnDataAvailable
odczytuje dane i wywołuje funkcję wskazywaną przez funkcję pFunc (na przykład w celu przechowywania danych lub drukowania ich na ekranie).
CBindStatusCallback::GetBindInfo
Wywoływane, aby poinformować moniker, jak powiązać.
STDMETHOD(GetBindInfo)(
DWORD* pgrfBSCF,
BINDINFO* pbindinfo);
Parametry
pgrfBSCF
[out] Wskaźnik do wartości wyliczenia BINDF wskazujący, jak powinna wystąpić operacja powiązania. Domyślnie ustaw następujące wartości wyliczenia:
BINDF_ASYNCHRONOUS pobieranie asynchroniczne.
OnDataAvailable
BINDF_ASYNCSTORAGE zwraca E_PENDING, gdy dane nie są jeszcze dostępne, zamiast blokować, dopóki dane nie będą dostępne.
BINDF_GETNEWESTVERSION Operacja powiązania powinna pobrać najnowszą wersję danych.
BINDF_NOWRITECACHE Operacja powiązania nie powinna przechowywać pobranych danych w pamięci podręcznej dysku.
pbindinfo
[in, out] Wskaźnik do BINDINFO
struktury, który zawiera więcej informacji o sposobie wystąpienia powiązania obiektu.
Wartość zwracana
Jedna ze standardowych wartości HRESULT.
Uwagi
Domyślna implementacja ustawia powiązanie jako asynchroniczne i użycie modelu wypychania danych. W modelu wypychania danych moniker napędza operację powiązania asynchronicznego i stale powiadamia klienta za każdym razem, gdy są dostępne nowe dane.
CBindStatusCallback::GetPriority
Wywoływana przez asynchroniczny moniker w celu uzyskania priorytetu operacji powiązania.
STDMETHOD(GetPriority)(LONG* pnPriority);
Parametry
pnPriority
[out] Adres zmiennej LONG , która w przypadku powodzenia otrzymuje priorytet.
Wartość zwracana
Zwraca E_NOTIMPL.
CBindStatusCallback::m_dwAvailableToRead
Może służyć do przechowywania liczby dostępnych bajtów do odczytu.
DWORD m_dwAvailableToRead;
Uwagi
Zainicjowane do zera w pliku StartAsyncDownload
.
CBindStatusCallback::m_dwTotalRead
Skumulowana suma bajtów odczytanych w asynchronicznym transferze danych.
DWORD m_dwTotalRead;
Uwagi
Przyrostowany za każdym razem OnDataAvailable
jest wywoływany przez liczbę bajtów rzeczywiście odczytanych. Zainicjowane do zera w pliku StartAsyncDownload
.
CBindStatusCallback::m_pFunc
Funkcja wskazywana m_pFunc
przez element jest wywoływana przez OnDataAvailable
element po odczytaniu dostępnych danych (na przykład do przechowywania danych lub drukowania ich na ekranie).
ATL_PDATAAVAILABLE m_pFunc;
Uwagi
Funkcja wskazywana przez m_pFunc
jest elementem członkowskim klasy obiektu i ma następującą składnię:
void Function_Name(
CBindStatusCallback<T>* pbsc,
BYTE* pBytes,
DWORD dwSize
);
CBindStatusCallback::m_pT
Wskaźnik do obiektu żądającego asynchronicznego transferu danych.
T* m_pT;
Uwagi
Obiekt CBindStatusCallback
jest templatized w klasie tego obiektu.
CBindStatusCallback::m_spBindCtx
Wskaźnik do interfejsu IBindCtx , który zapewnia dostęp do kontekstu powiązania (obiekt, który przechowuje informacje o określonej operacji powiązania moniker).
CComPtr<IBindCtx> m_spBindCtx;
Uwagi
Zainicjowane w pliku StartAsyncDownload
.
CBindStatusCallback::m_spBinding
Wskaźnik do IBinding
interfejsu bieżącej operacji powiązania.
CComPtr<IBinding> m_spBinding;
Uwagi
Zainicjowane w OnStartBinding
pliku i wydane w programie OnStopBinding
.
CBindStatusCallback::m_spMoniker
Wskaźnik do interfejsu IMoniker adresu URL do użycia.
CComPtr<IMoniker> m_spMoniker;
Uwagi
Zainicjowane w pliku StartAsyncDownload
.
CBindStatusCallback::m_spStream
Wskaźnik do interfejsu IStream bieżącej operacji powiązania.
CComPtr<IStream> m_spStream;
Uwagi
Zainicjowane OnDataAvailable
na podstawie STGMEDIUM
struktury, gdy flaga BCSF jest BCSF_FIRSTDATANOTIFICATION i zwalniana, gdy flaga BCSF jest BCSF_LASTDATANOTIFICATION.
CBindStatusCallback::OnDataAvailable
Dostarczone przez system asynchroniczne wywołania OnDataAvailable
moniker w celu udostępnienia danych do obiektu.
STDMETHOD(
OnDataAvailable)(DWORD grfBSCF,
DWORD dwSize,
FORMATETC* /* pformatetc */,
STGMEDIUM* pstgmed);
Parametry
grfBSCF
[in] Wartość wyliczenia BSCF. Co najmniej jeden z następujących elementów: BSCF_FIRSTDATANOTIFICATION, BSCF_INTERMEDIARYDATANOTIFICATION lub BSCF_LASTDATANOTIFICATION.
dwSize
[in] Skumulowana ilość (w bajtach) danych dostępnych od początku powiązania. Może być równa zero, co oznacza, że ilość danych nie jest odpowiednia lub że żadna określona ilość nie stała się dostępna.
pformatetc
[in] Wskaźnik do struktury FORMATETC , która zawiera format dostępnych danych. Jeśli nie ma formatu, można CF_NULL.
pstgmed
[in] Wskaźnik do struktury STGMEDIUM zawierającej rzeczywiste dane są teraz dostępne.
Wartość zwracana
Jedna ze standardowych wartości HRESULT.
Uwagi
OnDataAvailable
odczytuje dane, a następnie wywołuje metodę klasy obiektu (na przykład w celu przechowywania danych lub drukowania ich na ekranie). Aby uzyskać szczegółowe informacje, zobacz CBindStatusCallback::StartAsyncDownload .
CBindStatusCallback::OnLowResource
Wywoływane, gdy zasoby są niskie.
STDMETHOD(OnLowResource)(DWORD /* dwReserved */);
Parametry
dwReserved
Zarezerwowany.
Wartość zwracana
Zwraca S_OK.
CBindStatusCallback::OnObjectAvailable
Wywoływana przez asynchroniczny moniker w celu przekazania wskaźnika interfejsu obiektu do aplikacji.
STDMETHOD(OnObjectAvailable)(REFID /* riid */, IUnknown* /* punk */);
Parametry
riid
Identyfikator interfejsu żądanego interfejsu. Nieużywany.
Punk
Adres interfejsu IUnknown. Nieużywany.
Wartość zwracana
Zwraca S_OK.
CBindStatusCallback::OnProgress
Wywołana w celu wskazania postępu procesu pobierania danych.
STDMETHOD(OnProgress)(
ULONG /* ulProgress */,
ULONG /* ulProgressMax */,
ULONG /* ulStatusCode */,
LPCWSTRONG /* szStatusText */);
Parametry
ulProgress
Niepodpisane długie liczby całkowite. Nieużywany.
ulProgressMax
Niepodpisane długie liczby całkowite nieużywane.
ulStatusCode
Niepodpisane długie liczby całkowite. Nieużywany.
szStatusText
Adres wartości ciągu. Nieużywany.
Wartość zwracana
Zwraca S_OK.
CBindStatusCallback::OnStartBinding
Ustawia element członkowski danych m_spBinding do wskaźnika w narzędziu IBinding
pBinding.
STDMETHOD(OnStartBinding)(DWORD /* dwReserved */, IBinding* pBinding);
Parametry
dwReserved
Zarezerwowane do użytku w przyszłości.
Łączenie pBinding
[in] Adres interfejsu IBinding bieżącej operacji powiązania. Nie może to być wartość NULL. Klient powinien wywołać metodę AddRef w tym wskaźniku, aby zachować odwołanie do obiektu powiązania.
CBindStatusCallback::OnStopBinding
IBinding
Zwalnia wskaźnik w m_spBinding elementu członkowskiego danych.
STDMETHOD(OnStopBinding)(HRESULT hresult, LPCWSTR /* szError */);
Parametry
hresult
Kod stanu zwrócony z operacji powiązania.
szError
Adres wartości ciągu. Nieużywany.
Uwagi
Wywoływany przez system asynchroniczny moniker wskazujący koniec operacji powiązania.
CBindStatusCallback::StartAsyncDownload
Rozpoczyna pobieranie danych asynchronicznie z określonego adresu URL.
HRESULT StartAsyncDownload(
T* pT,
ATL_PDATAAVAILABLE pFunc,
BSTR bstrURL,
IUnknown* pUnkContainer = NULL,
BOOL bRelative = FALSE);
Parametry
Pt
[in] Wskaźnik do obiektu żądającego asynchronicznego transferu danych. Obiekt CBindStatusCallback
jest templatized w klasie tego obiektu.
funkcja pFunc
[in] Wskaźnik do funkcji, która odbiera odczytywane dane. Funkcja jest składową klasy obiektu typu T
. Zobacz Uwagi dotyczące składni i przykładu.
bstrURL
[in] Adres URL do uzyskiwania danych. Może to być dowolny prawidłowy adres URL lub nazwa pliku. Nie można mieć wartości NULL. Na przykład:
CComBSTR mybstr =_T("http://somesite/data.htm")
pUnkContainer
[in] Kontener IUnknown
. Wartość NULL domyślnie.
BRelative
[in] Flaga wskazująca, czy adres URL jest względny, czy bezwzględny. Wartość FALSE domyślnie oznacza, że adres URL jest bezwzględny.
Wartość zwracana
Jedna ze standardowych wartości HRESULT.
Uwagi
Za każdym razem, gdy dane są dostępne, są wysyłane do obiektu za pośrednictwem OnDataAvailable
elementu . OnDataAvailable
odczytuje dane i wywołuje funkcję wskazywaną przez funkcję pFunc (na przykład w celu przechowywania danych lub drukowania ich na ekranie).
Funkcja wskazywana przez funkcję pFunc jest elementem członkowskim klasy obiektu i ma następującą składnię:
void Function_Name(
CBindStatusCallback<T>* pbsc,
BYTE* pBytes,
DWORD dwSize);
W poniższym przykładzie (pobranym z przykładu ASYNC ) funkcja OnData
zapisuje odebrane dane w polu tekstowym.
Przykład
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!!!"));
}
}
}