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
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 T
Des 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 OnDataAvailable
das Objekt an das Objekt gesendet. OnDataAvailable
liest 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 T
Des 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 OnDataAvailable
das Objekt an das Objekt gesendet. OnDataAvailable
liest 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!!!"));
}
}
}