Bagikan melalui


Kelas CBindStatusCallback

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

CComObjectRootEx

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

Lihat juga

Gambaran Umum Kelas