Udostępnij za pośrednictwem


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

CComObjectRootEx

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

Zobacz też

Omówienie klasy