Freigeben über


CBindStatusCallback-Klasse

Diese Klasse implementiert die IBindStatusCallback -Schnittstelle.

Wichtig

Diese Klasse und ihre Member können nicht in Anwendungen verwendet werden, die in der Windows-Runtime ausgeführt werden.

Syntax

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>

Parameter

T
Ihre Klasse, die die Funktion enthält, die aufgerufen wird, wenn die Daten empfangen werden.

nBindFlags
Gibt die Bindungskennzeichnungen an, die von GetBindInfo zurückgegeben werden. Die Standardimplementierung legt fest, dass die Bindung asynchron ist, die neueste Version des Daten-/Objekts abruft und keine abgerufenen Daten im Datenträgercache speichert.

Member

Öffentliche Konstruktoren

Name Beschreibung
CBindStatusCallback::CBindStatusCallback Der Konstruktor.
CBindStatusCallback::~CBindStatusCallback Der Destruktor.

Öffentliche Methoden

Name Beschreibung
CBindStatusCallback::D ownload Statische Methode, die den Downloadvorgang startet, erstellt ein CBindStatusCallback Objekt und ruft auf StartAsyncDownload.
CBindStatusCallback::GetBindInfo Wird vom asynchronen Moniker aufgerufen, um Informationen zum Typ der zu erstellenden Bindung anzufordern.
CBindStatusCallback::GetPriority Vom asynchronen Moniker aufgerufen, um die Priorität des Bindungsvorgangs abzurufen. Die ATL-Implementierung gibt zurück E_NOTIMPL.
CBindStatusCallback::OnDataAvailable Wird aufgerufen, um Daten für Ihre Anwendung bereitzustellen, sobald sie verfügbar ist. Liest die Daten und ruft dann die an sie übergebene Funktion auf, um die Daten zu verwenden.
CBindStatusCallback::OnLowResource Wird aufgerufen, wenn Ressourcen niedrig sind. Die ATL-Implementierung gibt S_OK zurück.
CBindStatusCallback::OnObjectAvailable Vom asynchronen Moniker aufgerufen, um einen Objektschnittstellenzeiger an Ihre Anwendung zu übergeben. Die ATL-Implementierung gibt S_OK zurück.
CBindStatusCallback::OnProgress Wird aufgerufen, um den Fortschritt eines Datendownloadvorgangs anzugeben. Die ATL-Implementierung gibt S_OK zurück.
CBindStatusCallback::OnStartBinding Wird aufgerufen, wenn die Bindung gestartet wird.
CBindStatusCallback::OnStopBinding Wird aufgerufen, wenn die asynchrone Datenübertragung beendet wird.
CBindStatusCallback::StartAsyncDownload Initialisiert die verfügbaren Bytes, und Bytes werden auf Null gelesen, ein Push-Typ-Datenstromobjekt aus einer URL erstellt und jedes Mal aufgerufen OnDataAvailable , wenn Daten verfügbar sind.

Öffentliche Datenmember

Name Beschreibung
CBindStatusCallback::m_dwAvailableToRead Anzahl der zum Lesen verfügbaren Bytes.
CBindStatusCallback::m_dwTotalRead Gesamtanzahl der gelesenen Bytes.
CBindStatusCallback::m_pFunc Zeiger auf die Funktion, die aufgerufen wird, wenn Daten verfügbar sind.
CBindStatusCallback::m_pT Zeiger auf das Objekt, das die asynchrone Datenübertragung anfordert.
CBindStatusCallback::m_spBindCtx Zeiger auf die IBindCtx-Schnittstelle für den aktuellen Bindungsvorgang.
CBindStatusCallback::m_spBinding Zeiger auf die IBinding Schnittstelle für den aktuellen Bindungsvorgang.
CBindStatusCallback::m_spMoniker Zeiger auf die IMoniker-Schnittstelle für die zu verwendende URL.
CBindStatusCallback::m_spStream Zeiger auf die IStream-Schnittstelle für die Datenübertragung.

Hinweise

Die CBindStatusCallback-Klasse implementiert die IBindStatusCallback-Schnittstelle. IBindStatusCallback muss von Ihrer Anwendung implementiert werden, damit sie Benachrichtigungen von einer asynchronen Datenübertragung empfangen kann. Der vom System bereitgestellte asynchrone Moniker verwendet IBindStatusCallback Methoden zum Senden und Empfangen von Informationen über die asynchrone Datenübertragung an und von Ihrem Objekt.

In der Regel ist das CBindStatusCallback Objekt einem bestimmten Bindungsvorgang zugeordnet. Wenn Sie beispielsweise die URL-Eigenschaft festlegen, wird im ASYNC-Beispiel ein CBindStatusCallback Objekt im Aufruf von 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;
}

Der asynchrone Moniker verwendet die Rückruffunktion OnData , um Ihre Anwendung aufzurufen, wenn sie Daten enthält. Der asynchrone Moniker wird vom System bereitgestellt.

Vererbungshierarchie

CComObjectRootBase

IBindStatusCallback

CComObjectRootEx

CBindStatusCallback

Anforderungen

Header: atlctl.h

CBindStatusCallback::CBindStatusCallback

Der Konstruktor.

CBindStatusCallback();

Hinweise

Erstellt ein Objekt zum Empfangen von Benachrichtigungen über die asynchrone Datenübertragung. In der Regel wird für jeden Bindungsvorgang ein Objekt erstellt.

Der Konstruktor initialisiert außerdem m_pT und m_pFunc auf NULL.

CBindStatusCallback::~CBindStatusCallback

Der Destruktor.

~CBindStatusCallback();

Hinweise

Gibt alle zugeordneten Ressourcen frei.

CBindStatusCallback::D ownload

Erstellt ein CBindStatusCallback Objekt und Aufrufe StartAsyncDownload zum asynchronen Herunterladen von Daten aus der angegebenen URL.

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

Parameter

Pt
[in] Ein Zeiger auf das Objekt, das die asynchrone Datenübertragung anfordert. Das CBindStatusCallback Objekt wird für die Klasse dieses Objekts templatiert.

pFunc
[in] Ein Zeiger auf die Funktion, die die gelesenen Daten empfängt. Die Funktion ist ein Element der Typklasse TDes Objekts. Eine Syntax und ein Beispiel finden Sie unter "StartAsyncDownload ".

bstrURL
[in] Die URL, aus der Daten abgerufen werden sollen. Dies kann eine beliebige gültige URL oder ein beliebiger Dateiname sein. Lässt keine NULL-Werte zu. Zum Beispiel:

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

pUnkContainer
[in] Der IUnknown Des Containers. NULL standardmäßig.

bRelative
[in] Ein Flag, das angibt, ob die URL relativ oder absolut ist. FALSE ist standardmäßig absolut, d. h. die URL ist absolut.

Rückgabewert

Einer der HRESULT-Standardwerte.

Hinweise

Jedes Mal, wenn Daten verfügbar sind, werden sie über OnDataAvailabledas Objekt an das Objekt gesendet. OnDataAvailableliest die Daten und ruft die Funktion auf, auf die pFunc verweist (z. B. um die Daten zu speichern oder auf dem Bildschirm zu drucken).

CBindStatusCallback::GetBindInfo

Aufgerufen, um dem Moniker mitzuteilen, wie man binden kann.

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

Parameter

pgrfBSCF
[out] Ein Zeiger auf BINDF-Enumerationswerte, der angibt, wie der Bindungsvorgang erfolgen soll. Legen Sie standardmäßig die folgenden Enumerationswerte fest:

BINDF_ASYNCHRONOUS asynchroner Download.

OnDataAvailable BINDF_ASYNCSTORAGE gibt E_PENDING zurück, wenn Daten noch nicht verfügbar sind, anstatt zu blockieren, bis Daten verfügbar sind.

BINDF_GETNEWESTVERSION Der Bindungsvorgang sollte die neueste Version der Daten abrufen.

BINDF_NOWRITECACHE Der Bindungsvorgang sollte keine abgerufenen Daten im Datenträgercache speichern.

pbindinfo
[in, out] Ein Zeiger auf die BINDINFO Struktur, der weitere Informationen dazu gibt, wie das Objekt gebunden werden soll.

Rückgabewert

Einer der HRESULT-Standardwerte.

Hinweise

Die Standardimplementierung legt fest, dass die Bindung asynchron ist und das Daten-Push-Modell verwendet werden soll. Im Daten-Push-Modell steuert der Moniker den asynchronen Bindungsvorgang und benachrichtigt den Client kontinuierlich, wenn neue Daten verfügbar sind.

CBindStatusCallback::GetPriority

Vom asynchronen Moniker aufgerufen, um die Priorität des Bindungsvorgangs abzurufen.

STDMETHOD(GetPriority)(LONG* pnPriority);

Parameter

pnPriority
[out] Adresse der LONG-Variablen , die bei Erfolg die Priorität erhält.

Rückgabewert

Gibt E_NOTIMPL zurück.

CBindStatusCallback::m_dwAvailableToRead

Kann verwendet werden, um die Anzahl der zu lesenden Bytes zu speichern.

DWORD m_dwAvailableToRead;

Hinweise

Initialisiert auf Null in StartAsyncDownload.

CBindStatusCallback::m_dwTotalRead

Die kumulierte Summe der in der asynchronen Datenübertragung gelesenen Bytes.

DWORD m_dwTotalRead;

Hinweise

Wird jedes Mal OnDataAvailable erhöht, wenn die Anzahl der Bytes aufgerufen wird, die tatsächlich gelesen werden. Initialisiert auf Null in StartAsyncDownload.

CBindStatusCallback::m_pFunc

Die Funktion, auf m_pFunc die verwiesen wird, wird aufgerufen OnDataAvailable , nachdem sie die verfügbaren Daten gelesen hat (z. B. um die Daten zu speichern oder auf dem Bildschirm zu drucken).

ATL_PDATAAVAILABLE m_pFunc;

Hinweise

Die Funktion, auf die verwiesen wird, m_pFunc ist ein Element der Klasse Ihres Objekts und weist die folgende Syntax auf:

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

CBindStatusCallback::m_pT

Ein Zeiger auf das Objekt, das die asynchrone Datenübertragung anfordert.

T* m_pT;

Hinweise

Das CBindStatusCallback Objekt wird für die Klasse dieses Objekts templatiert.

CBindStatusCallback::m_spBindCtx

Ein Zeiger auf eine IBindCtx-Schnittstelle , die Zugriff auf den Bindungskontext ermöglicht (ein Objekt, das Informationen zu einem bestimmten Moniker-Bindungsvorgang speichert).

CComPtr<IBindCtx> m_spBindCtx;

Hinweise

Initialisiert in StartAsyncDownload.

CBindStatusCallback::m_spBinding

Ein Zeiger auf die IBinding Schnittstelle des aktuellen Bindungsvorgangs.

CComPtr<IBinding> m_spBinding;

Hinweise

Initialisiert in OnStartBinding und freigegeben in OnStopBinding.

CBindStatusCallback::m_spMoniker

Ein Zeiger auf die IMoniker-Schnittstelle für die zu verwendende URL.

CComPtr<IMoniker> m_spMoniker;

Hinweise

Initialisiert in StartAsyncDownload.

CBindStatusCallback::m_spStream

Ein Zeiger auf die IStream-Schnittstelle des aktuellen Bindungsvorgangs.

CComPtr<IStream> m_spStream;

Hinweise

Initialisiert OnDataAvailable aus der STGMEDIUM Struktur, wenn das BCSF-Flag BCSF_FIRSTDATANOTIFICATION und freigegeben wird, wenn das BCSF-Flag BCSF_LASTDATANOTIFICATION ist.

CBindStatusCallback::OnDataAvailable

Die vom System bereitgestellten asynchronen Monikeraufrufe OnDataAvailable , um Daten für das Objekt bereitzustellen, sobald es verfügbar wird.

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

Parameter

grfBSCF
[in] Ein BSCF-Enumerationswert. Eine oder mehrere der folgenden Optionen: BSCF_FIRSTDATANOTIFICATION, BSCF_INTERMEDIARYDATANOTIFICATION oder BSCF_LASTDATANOTIFICATION.

dwSize
[in] Der kumulierte Betrag (in Byte) der Daten, die seit beginn der Bindung verfügbar sind. Kann null sein, was angibt, dass die Datenmenge nicht relevant ist oder dass keine bestimmte Menge verfügbar wurde.

pformatetc
[in] Zeigen Sie auf die FORMATTC-Struktur , die das Format der verfügbaren Daten enthält. Wenn kein Format vorhanden ist, kann CF_NULL werden.

pstgmed
[in] Zeigen Sie auf die STGMEDIUM-Struktur , die die tatsächlichen Daten enthält, die jetzt verfügbar sind.

Rückgabewert

Einer der HRESULT-Standardwerte.

Hinweise

OnDataAvailable liest die Daten und ruft dann eine Methode der Klasse Des Objekts auf (z. B. um die Daten zu speichern oder auf dem Bildschirm zu drucken). Weitere Informationen finden Sie unter CBindStatusCallback::StartAsyncDownload .

CBindStatusCallback::OnLowResource

Wird aufgerufen, wenn Ressourcen niedrig sind.

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

Parameter

dwReserved
Reserviert.

Rückgabewert

Gibt S_OK zurück.

CBindStatusCallback::OnObjectAvailable

Vom asynchronen Moniker aufgerufen, um einen Objektschnittstellenzeiger an Ihre Anwendung zu übergeben.

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

Parameter

riid
Schnittstellenbezeichner der angeforderten Schnittstelle. Nicht verwendet.

Punk
Adresse der IUnknown-Schnittstelle. Nicht verwendet.

Rückgabewert

Gibt S_OK zurück.

CBindStatusCallback::OnProgress

Wird aufgerufen, um den Fortschritt eines Datendownloadvorgangs anzugeben.

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

Parameter

ulProgress
Nicht signierte lange ganze Zahl. Nicht verwendet.

ulProgressMax
Nicht signierte ganze Zahl nicht verwendet.

ulStatusCode
Nicht signierte lange ganze Zahl. Nicht verwendet.

szStatusText
Adresse eines Zeichenfolgenwerts. Nicht verwendet.

Rückgabewert

Gibt S_OK zurück.

CBindStatusCallback::OnStartBinding

Legt das Datenelement m_spBinding auf den IBinding Zeiger in pBinding fest.

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

Parameter

dwReserved
Für die zukünftige Verwendung reserviert.

pBinding
[in] Adresse der IBinding-Schnittstelle des aktuellen Bindungsvorgangs. Dies kann nicht NULL sein. Der Client sollte AddRef auf diesem Zeiger aufrufen, um einen Verweis auf das Bindungsobjekt beizubehalten.

CBindStatusCallback::OnStopBinding

Gibt den IBinding Zeiger im Datenelement m_spBinding frei.

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

Parameter

hresult
Statuscode, der vom Bindungsvorgang zurückgegeben wird.

szError
Adresse eines Zeichenfolgenwerts. Nicht verwendet.

Hinweise

Wird vom vom System bereitgestellten asynchronen Moniker aufgerufen, um das Ende des Bindungsvorgangs anzugeben.

CBindStatusCallback::StartAsyncDownload

Startet das asynchrone Herunterladen von Daten aus der angegebenen URL.

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

Parameter

Pt
[in] Ein Zeiger auf das Objekt, das die asynchrone Datenübertragung anfordert. Das CBindStatusCallback Objekt wird für die Klasse dieses Objekts templatiert.

pFunc
[in] Ein Zeiger auf die Funktion, die die zu lesenden Daten empfängt. Die Funktion ist ein Element der Typklasse TDes Objekts. Unter "Hinweise" finden Sie Syntax und ein Beispiel.

bstrURL
[in] Die URL, aus der Daten abgerufen werden sollen. Dies kann eine beliebige gültige URL oder ein beliebiger Dateiname sein. Lässt keine NULL-Werte zu. Zum Beispiel:

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

pUnkContainer
[in] Der IUnknown Des Containers. NULL standardmäßig.

bRelative
[in] Ein Flag, das angibt, ob die URL relativ oder absolut ist. FALSE ist standardmäßig absolut, d. h. die URL ist absolut.

Rückgabewert

Einer der HRESULT-Standardwerte.

Hinweise

Jedes Mal, wenn Daten verfügbar sind, werden sie über OnDataAvailabledas Objekt an das Objekt gesendet. OnDataAvailableliest die Daten und ruft die Funktion auf, auf die pFunc verweist (z. B. um die Daten zu speichern oder auf dem Bildschirm zu drucken).

Die Funktion, auf die pFunc verweist, ist ein Element der Klasse Ihres Objekts und weist die folgende Syntax auf:

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

Im folgenden Beispiel (aus dem ASYNC-Beispiel ) schreibt die Funktion OnData die empfangenen Daten in ein Textfeld.

Beispiel

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

Siehe auch

Klassenübersicht