Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Kelas ini menerapkan antarmuka IBindStatusCallback.
Penting
Kelas ini dan anggotanya tidak dapat digunakan dalam aplikasi yang dijalankan di Windows Runtime.
Sintaks
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
Kelas Anda yang berisi fungsi yang akan dipanggil saat data diterima.
nBindFlags
Menentukan bendera ikatan yang dikembalikan oleh GetBindInfo. Implementasi default mengatur pengikatan menjadi asinkron, mengambil versi terbaru data/objek, dan tidak menyimpan data yang diambil di cache disk.
Anggota
Konstruktor Publik
| Nama | Deskripsi |
|---|---|
| CBindStatusCallback::CBindStatusCallback | Konstruktor. |
| CBindStatusCallback::~CBindStatusCallback | Destruktor. |
Metode Publik
| Nama | Deskripsi |
|---|---|
| CBindStatusCallback::D ownload | Metode statis yang memulai proses pengunduhan, membuat CBindStatusCallback objek, dan memanggil StartAsyncDownload. |
| CBindStatusCallback::GetBindInfo | Dipanggil oleh moniker asinkron untuk meminta informasi tentang jenis ikatan yang akan dibuat. |
| CBindStatusCallback::GetPriority | Dipanggil oleh moniker asinkron untuk mendapatkan prioritas operasi pengikatan. Implementasi ATL mengembalikan E_NOTIMPL. |
| CBindStatusCallback::OnDataAvailable | Dipanggil untuk menyediakan data ke aplikasi Anda saat tersedia. Membaca data, lalu memanggil fungsi yang diteruskan ke data tersebut untuk menggunakan data. |
| CBindStatusCallback::OnLowResource | Dipanggil ketika sumber daya rendah. Implementasi ATL mengembalikan S_OK. |
| CBindStatusCallback::OnObjectAvailable | Dipanggil oleh moniker asinkron untuk meneruskan penunjuk antarmuka objek ke aplikasi Anda. Implementasi ATL mengembalikan S_OK. |
| CBindStatusCallback::OnProgress | Dipanggil untuk menunjukkan kemajuan proses pengunduhan data. Implementasi ATL mengembalikan S_OK. |
| CBindStatusCallback::OnStartBinding | Dipanggil saat pengikatan dimulai. |
| CBindStatusCallback::OnStopBinding | Dipanggil ketika transfer data asinkron dihentikan. |
| CBindStatusCallback::StartAsyncDownload | Menginisialisasi byte yang tersedia dan byte dibaca ke nol, membuat objek aliran jenis push dari URL, dan memanggil OnDataAvailable setiap kali data tersedia. |
Anggota Data Publik
| Nama | Deskripsi |
|---|---|
| CBindStatusCallback::m_dwAvailableToRead | Jumlah byte yang tersedia untuk dibaca. |
| CBindStatusCallback::m_dwTotalRead | Jumlah total byte yang dibaca. |
| CBindStatusCallback::m_pFunc | Penunjuk ke fungsi yang dipanggil saat data tersedia. |
| CBindStatusCallback::m_pT | Penunjuk ke objek yang meminta transfer data asinkron. |
| CBindStatusCallback::m_spBindCtx | Penunjuk ke antarmuka IBindCtx untuk operasi pengikatan saat ini. |
| CBindStatusCallback::m_spBinding | Penunjuk ke IBinding antarmuka untuk operasi pengikatan saat ini. |
| CBindStatusCallback::m_spMoniker | Arahkan ke antarmuka IMoniker agar URL dapat digunakan. |
| CBindStatusCallback::m_spStream | Penunjuk ke antarmuka IStream untuk transfer data. |
Keterangan
Kelas CBindStatusCallback menerapkan antarmuka IBindStatusCallback. IBindStatusCallback harus diimplementasikan oleh aplikasi Anda sehingga dapat menerima pemberitahuan dari transfer data asinkron. Moniker asinkron yang disediakan oleh sistem menggunakan IBindStatusCallback metode untuk mengirim dan menerima informasi tentang transfer data asinkron ke dan dari objek Anda.
Biasanya, objek dikaitkan CBindStatusCallback dengan operasi pengikatan tertentu. Misalnya, dalam sampel ASYNC , saat Anda mengatur properti URL, ia membuat CBindStatusCallback objek dalam panggilan ke 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;
}
Moniker asinkron menggunakan fungsi OnData panggilan balik untuk memanggil aplikasi Anda saat memiliki data. Moniker asinkron disediakan oleh sistem.
Hierarki Warisan
CComObjectRootBase
IBindStatusCallback
CBindStatusCallback
Persyaratan
Header: atlctl.h
CBindStatusCallback::CBindStatusCallback
Konstruktor.
CBindStatusCallback();
Keterangan
Membuat objek untuk menerima pemberitahuan mengenai transfer data asinkron. Biasanya, satu objek dibuat untuk setiap operasi pengikatan.
Konstruktor juga menginisialisasi m_pT dan m_pFunc ke NULL.
CBindStatusCallback::~CBindStatusCallback
Destruktor.
~CBindStatusCallback();
Keterangan
Membebaskan semua sumber daya yang dialokasikan.
CBindStatusCallback::D ownload
CBindStatusCallback Membuat objek dan panggilan StartAsyncDownload untuk mulai mengunduh data secara asinkron dari URL yang ditentukan.
static HRESULT Download(
T* pT,
ATL_PDATAAVAILABLE pFunc,
BSTR bstrURL,
IUnknown* pUnkContainer = NULL,
BOOL bRelative = FALSE);
Parameter
Pt
[di] Penunjuk ke objek yang meminta transfer data asinkron. Objek CBindStatusCallback di-templat pada kelas objek ini.
pFunc
[di] Penunjuk ke fungsi yang menerima data yang dibaca. Fungsi ini adalah anggota kelas jenis Tobjek Anda . Lihat StartAsyncDownload untuk sintaksis dan contohnya.
bstrURL
[di] URL untuk mendapatkan data. Dapat berupa URL atau nama file yang valid. Tidak boleh NULL. Contohnya:
CComBSTR mybstr =_T("http://somesite/data.htm")
pUnkContainer
[di] Dari IUnknown kontainer. NULL secara default.
bRelative
[di] Bendera yang menunjukkan apakah URL relatif atau absolut. FALSE secara default, yang berarti URL adalah absolut.
Tampilkan Nilai
Salah satu nilai HRESULT standar.
Keterangan
Setiap kali data tersedia, data dikirim ke objek melalui OnDataAvailable. OnDataAvailable membaca data dan memanggil fungsi yang ditujukkan oleh pFunc (misalnya, untuk menyimpan data atau mencetaknya ke layar).
CBindStatusCallback::GetBindInfo
Dipanggil untuk memberitahu moniker cara mengikat.
STDMETHOD(GetBindInfo)(
DWORD* pgrfBSCF,
BINDINFO* pbindinfo);
Parameter
pgrfBSCF
[out] Penunjuk ke nilai enumerasi BINDF yang menunjukkan bagaimana operasi pengikatan harus terjadi. Secara default, atur dengan nilai enumerasi berikut:
BINDF_ASYNCHRONOUS Unduhan asinkron.
OnDataAvailable BINDF_ASYNCSTORAGE mengembalikan E_PENDING saat data belum tersedia daripada memblokir hingga data tersedia.
BINDF_GETNEWESTVERSION Operasi pengikatan harus mengambil versi data terbaru.
BINDF_NOWRITECACHE Operasi pengikatan tidak boleh menyimpan data yang diambil dalam cache disk.
pbindinfo
[masuk, keluar] Penunjuk ke BINDINFO struktur memberikan informasi lebih lanjut tentang bagaimana objek ingin pengikatan terjadi.
Tampilkan Nilai
Salah satu nilai HRESULT standar.
Keterangan
Implementasi default menetapkan pengikatan menjadi asinkron dan untuk menggunakan model pendorongan data. Dalam model pendorongan data, moniker mendorong operasi pengikatan asinkron dan terus memberi tahu klien setiap kali data baru tersedia.
CBindStatusCallback::GetPriority
Dipanggil oleh moniker asinkron untuk mendapatkan prioritas operasi pengikatan.
STDMETHOD(GetPriority)(LONG* pnPriority);
Parameter
pnPriority
[out] Alamat variabel LONG yang, pada keberhasilannya, menerima prioritas.
Tampilkan Nilai
Mengembalikan E_NOTIMPL.
CBindStatusCallback::m_dwAvailableToRead
Dapat digunakan untuk menyimpan jumlah byte yang tersedia untuk dibaca.
DWORD m_dwAvailableToRead;
Keterangan
Diinisialisasi ke nol di StartAsyncDownload.
CBindStatusCallback::m_dwTotalRead
Total kumulatif byte yang dibaca dalam transfer data asinkron.
DWORD m_dwTotalRead;
Keterangan
Bertambah setiap kali OnDataAvailable dipanggil oleh jumlah byte yang benar-benar dibaca. Diinisialisasi ke nol di StartAsyncDownload.
CBindStatusCallback::m_pFunc
Fungsi yang ditujukkan oleh m_pFunc dipanggil oleh OnDataAvailable setelah membaca data yang tersedia (misalnya, untuk menyimpan data atau mencetaknya ke layar).
ATL_PDATAAVAILABLE m_pFunc;
Keterangan
Fungsi yang ditujukkan oleh m_pFunc adalah anggota kelas objek Anda dan memiliki sintaks berikut:
void Function_Name(
CBindStatusCallback<T>* pbsc,
BYTE* pBytes,
DWORD dwSize
);
CBindStatusCallback::m_pT
Penunjuk ke objek yang meminta transfer data asinkron.
T* m_pT;
Keterangan
Objek CBindStatusCallback di-templat pada kelas objek ini.
CBindStatusCallback::m_spBindCtx
Penunjuk ke antarmuka IBindCtx yang menyediakan akses ke konteks pengikatan (objek yang menyimpan informasi tentang operasi pengikatan moniker tertentu).
CComPtr<IBindCtx> m_spBindCtx;
Keterangan
Diinisialisasi dalam StartAsyncDownload.
CBindStatusCallback::m_spBinding
Penunjuk ke IBinding antarmuka operasi pengikatan saat ini.
CComPtr<IBinding> m_spBinding;
Keterangan
Diinisialisasi dalam OnStartBinding dan dirilis dalam OnStopBinding.
CBindStatusCallback::m_spMoniker
Penunjuk ke antarmuka IMoniker untuk digunakan URL.
CComPtr<IMoniker> m_spMoniker;
Keterangan
Diinisialisasi dalam StartAsyncDownload.
CBindStatusCallback::m_spStream
Penunjuk ke antarmuka IStream dari operasi pengikatan saat ini.
CComPtr<IStream> m_spStream;
Keterangan
Diinisialisasi dari OnDataAvailable STGMEDIUM struktur ketika bendera BCSF BCSF_FIRSTDATANOTIFICATION dan dirilis saat bendera BCSF BCSF_LASTDATANOTIFICATION.
CBindStatusCallback::OnDataAvailable
Moniker asinkron yang disediakan sistem memanggil OnDataAvailable untuk menyediakan data ke objek saat tersedia.
STDMETHOD(
OnDataAvailable)(DWORD grfBSCF,
DWORD dwSize,
FORMATETC* /* pformatetc */,
STGMEDIUM* pstgmed);
Parameter
grfBSCF
[di] Nilai enumerasi BSCF. Satu atau beberapa hal berikut ini: BSCF_FIRSTDATANOTIFICATION, BSCF_INTERMEDIARYDATANOTIFICATION, atau BSCF_LASTDATANOTIFICATION.
dwSize
[di] Jumlah kumulatif (dalam byte) data yang tersedia sejak awal pengikatan. Bisa nol, menunjukkan bahwa jumlah data tidak relevan atau tidak ada jumlah tertentu yang tersedia.
pformatetc
[di] Penunjuk ke struktur FORMATETC yang berisi format data yang tersedia. Jika tidak ada format, bisa CF_NULL.
pstgmed
[di] Arahkan ke struktur STGMEDIUM yang menyimpan data aktual sekarang tersedia.
Tampilkan Nilai
Salah satu nilai HRESULT standar.
Keterangan
OnDataAvailable membaca data, lalu memanggil metode kelas objek Anda (misalnya, untuk menyimpan data atau mencetaknya ke layar). Lihat CBindStatusCallback::StartAsyncDownload untuk detailnya.
CBindStatusCallback::OnLowResource
Dipanggil ketika sumber daya rendah.
STDMETHOD(OnLowResource)(DWORD /* dwReserved */);
Parameter
dwReserved
Dicadangkan.
Tampilkan Nilai
Mengembalikan S_OK.
CBindStatusCallback::OnObjectAvailable
Dipanggil oleh moniker asinkron untuk meneruskan penunjuk antarmuka objek ke aplikasi Anda.
STDMETHOD(OnObjectAvailable)(REFID /* riid */, IUnknown* /* punk */);
Parameter
riid
Pengidentifikasi antarmuka antarmuka yang diminta. Tidak digunakan.
Punk
Alamat antarmuka IUnknown. Tidak digunakan.
Tampilkan Nilai
Mengembalikan S_OK.
CBindStatusCallback::OnProgress
Dipanggil untuk menunjukkan kemajuan proses pengunduhan data.
STDMETHOD(OnProgress)(
ULONG /* ulProgress */,
ULONG /* ulProgressMax */,
ULONG /* ulStatusCode */,
LPCWSTRONG /* szStatusText */);
Parameter
ulProgress
Bilangan bulat panjang yang tidak ditandatangani. Tidak digunakan.
ulProgressMax
Bilangan bulat panjang tidak ditandatangani.
ulStatusCode
Bilangan bulat panjang yang tidak ditandatangani. Tidak digunakan.
szStatusText
Alamat nilai string. Tidak digunakan.
Tampilkan Nilai
Mengembalikan S_OK.
CBindStatusCallback::OnStartBinding
Mengatur m_spBinding anggota data ke IBinding penunjuk di pBinding.
STDMETHOD(OnStartBinding)(DWORD /* dwReserved */, IBinding* pBinding);
Parameter
dwReserved
Disiapkan untuk penggunaan masa mendatang.
pBinding
[di] Alamat antarmuka IBinding dari operasi pengikatan saat ini. Ini tidak boleh NULL. Klien harus memanggil AddRef pada pointer ini untuk menyimpan referensi ke objek pengikatan.
CBindStatusCallback::OnStopBinding
Merilis pointer IBinding di m_spBinding anggota data.
STDMETHOD(OnStopBinding)(HRESULT hresult, LPCWSTR /* szError */);
Parameter
hresult
Kode status dikembalikan dari operasi pengikatan.
szError
Alamat nilai string. Tidak digunakan.
Keterangan
Dipanggil oleh moniker asinkron yang disediakan sistem untuk menunjukkan akhir operasi pengikatan.
CBindStatusCallback::StartAsyncDownload
Mulai mengunduh data secara asinkron dari URL yang ditentukan.
HRESULT StartAsyncDownload(
T* pT,
ATL_PDATAAVAILABLE pFunc,
BSTR bstrURL,
IUnknown* pUnkContainer = NULL,
BOOL bRelative = FALSE);
Parameter
Pt
[di] Penunjuk ke objek yang meminta transfer data asinkron. Objek CBindStatusCallback di-templat pada kelas objek ini.
pFunc
[di] Penunjuk ke fungsi yang menerima data yang sedang dibaca. Fungsi ini adalah anggota kelas jenis Tobjek Anda . Lihat Keterangan untuk sintaksis dan contoh.
bstrURL
[di] URL untuk mendapatkan data. Dapat berupa URL atau nama file yang valid. Tidak boleh NULL. Contohnya:
CComBSTR mybstr =_T("http://somesite/data.htm")
pUnkContainer
[di] Dari IUnknown kontainer. NULL secara default.
bRelative
[di] Bendera yang menunjukkan apakah URL relatif atau absolut. FALSE secara default, yang berarti URL adalah absolut.
Tampilkan Nilai
Salah satu nilai HRESULT standar.
Keterangan
Setiap kali data tersedia, data dikirim ke objek melalui OnDataAvailable. OnDataAvailable membaca data dan memanggil fungsi yang ditujukkan oleh pFunc (misalnya, untuk menyimpan data atau mencetaknya ke layar).
Fungsi yang ditujukkan oleh pFunc adalah anggota kelas objek Anda dan memiliki sintaks berikut:
void Function_Name(
CBindStatusCallback<T>* pbsc,
BYTE* pBytes,
DWORD dwSize);
Dalam contoh berikut (diambil dari sampel ASYNC ), fungsi OnData menulis data yang diterima ke dalam kotak teks.
Contoh
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!!!"));
}
}
}