CBindStatusCallback クラス

このクラスは、 IBindStatusCallback インターフェイスを実装します。

重要

このクラスとそのメンバーは、Windows ランタイムで実行するアプリケーションで使用することはできません。

構文

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>

パラメーター

T
データの受信時に呼び出される関数を含むクラス。

nBindFlags
GetBindInfo によって返されるバインド フラグを指定します。 既定の実装では、バインディングが非同期に設定され、最新バージョンのデータやオブジェクトが取得され、取得されたデータはディスク キャッシュに格納されません。

メンバー

パブリック コンストラクター

名前 説明
CBindStatusCallback::CBindStatusCallback コンストラクター。
CBindStatusCallback::~CBindStatusCallback デストラクター。

パブリック メソッド

名前 説明
CBindStatusCallback::Download ダウンロード プロセスを開始し、CBindStatusCallback オブジェクトを作成し、StartAsyncDownload を呼び出す静的メソッド。
CBindStatusCallback::GetBindInfo 作成されるバインドの種類に関する情報を要求するために非同期モニカーによって呼び出されます。
CBindStatusCallback::GetPriority バインド操作の優先順位を取得するために非同期モニカーによって呼び出されます。 ATL 実装では E_NOTIMPL が返されます。
CBindStatusCallback::OnDataAvailable 使用可能になったアプリケーションにデータを提供するために呼び出されます。 データを読み取ってから、渡された関数を呼び出してデータを使用します。
CBindStatusCallback::OnLowResource リソースが不足しているときに呼び出されます。 ATL 実装では S_OK が返されます。
CBindStatusCallback::OnObjectAvailable オブジェクト インターフェイス ポインターをアプリケーションに渡すために非同期モニカーによって呼び出されます。 ATL 実装では S_OK が返されます。
CBindStatusCallback::OnProgress データのダウンロード プロセスの進行状況を示すために呼び出されます。 ATL 実装では S_OK が返されます。
CBindStatusCallback::OnStartBinding バインディングの開始時に呼び出されます。
CBindStatusCallback::OnStopBinding 非同期データ転送の停止時に呼び出されます。
CBindStatusCallback::StartAsyncDownload 使用可能なバイト数と読み取られたバイト数を 0 に初期化し、URL からプッシュ型ストリーム オブジェクトを作成し、データが使用可能になるたびに OnDataAvailable を呼び出します。

パブリック データ メンバー

名前 説明
CBindStatusCallback::m_dwAvailableToRead 読み取り可能なバイト数。
CBindStatusCallback::m_dwTotalRead 読み取られたバイトの合計数。
CBindStatusCallback::m_pFunc データが使用可能な場合に呼び出される関数へのポインター。
CBindStatusCallback::m_pT 非同期データ転送を要求するオブジェクトへのポインター。
CBindStatusCallback::m_spBindCtx 現在のバインド操作の IBindCtx インターフェイスへのポインター。
CBindStatusCallback::m_spBinding 現在のバインド操作の IBinding インターフェイスへのポインター。
CBindStatusCallback::m_spMoniker 使用する URL の IMoniker インターフェイスへのポインター。
CBindStatusCallback::m_spStream データ転送の IStream インターフェイスへのポインター。

解説

CBindStatusCallback クラスは、IBindStatusCallback インターフェイスを実装します。 IBindStatusCallback は、非同期データ転送から通知を受信できるように、アプリケーションによって実装される必要があります。 システムによって提供される非同期モニカーでは、IBindStatusCallback メソッドを使用して、オブジェクト間の非同期データ転送に関する情報を送受信します。

通常、CBindStatusCallback オブジェクトは特定のバインド操作に関連付けられます。 たとえば、ASYNC サンプルでは、URL プロパティを設定すると、Download の呼び出しで CBindStatusCallback オブジェクトが作成されます。

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;
}

非同期モニカーでは、コールバック関数 OnData を使用して、データがある場合にアプリケーションを呼び出します。 非同期モニカーはシステムによって提供されます。

継承階層

CComObjectRootBase

IBindStatusCallback

CComObjectRootEx

CBindStatusCallback

必要条件

ヘッダー: atlctl.h

CBindStatusCallback::CBindStatusCallback

コンストラクター。

CBindStatusCallback();

解説

非同期データ転送に関する通知を受信するオブジェクトを作成します。 通常、バインド操作ごとに 1 つのオブジェクトが作成されます。

また、コンストラクターによって m_pTm_pFunc が NULL に初期化されます。

CBindStatusCallback::~CBindStatusCallback

デストラクター。

~CBindStatusCallback();

解説

割り当てられているすべてのリソースを解放します。

CBindStatusCallback::Download

CBindStatusCallback オブジェクトを作成し、StartAsyncDownload を呼び出して、指定された URL から非同期的にデータのダウンロードを開始します。

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

パラメーター

pT
[入力] 非同期データ転送を要求するオブジェクトへのポインター。 CBindStatusCallback オブジェクトは、このオブジェクトのクラスでテンプレート化されます。

pFunc
[入力] 読み取られるデータを受け取る関数へのポインター。 関数は、T 型のオブジェクトのクラスのメンバーです。 構文と例については、「StartAsyncDownload」を参照してください。

bstrURL
[入力] データの取得元の URL。 任意の有効な URL またはファイル名にすることができます。 Nll は指定できません。 次に例を示します。

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

pUnkContainer
[入力] コンテナーの IUnknown。 既定では NULL になります。

bRelative
[入力] URL が相対か絶対かを示すフラグ。 既定では FALSE になります。つまり、URL は絶対です。

戻り値

標準 HRESULT 値のいずれか。

解説

データが使用可能になるたびに、OnDataAvailable を使用してオブジェクトに送信されます。 OnDataAvailable ではデータを読み取り、pFunc によって指し示される関数を呼び出します (たとえば、データを格納したり、画面に出力したりする場合)。

CBindStatusCallback::GetBindInfo

モニカーにバインドする方法を指示するために呼び出されます。

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

パラメーター

pgrfBSCF
[出力] バインド操作の実行方法を示す BINDF 列挙値へのポインター。 既定では、次の列挙値で設定されます。

BINDF_ASYNCHRONOUS 非同期ダウンロード。

BINDF_ASYNCSTORAGE OnDataAvailable では、データが使用可能になるまでブロックするのではなく、データがまだ使用できない場合に E_PENDING を返します。

BINDF_GETNEWESTVERSION バインド操作で、最新バージョンのデータを取得する必要があります。

BINDF_NOWRITECACHE バインド操作では、取得されたデータをディスク キャッシュに格納することはできません。

pbindinfo
[入力、出力] オブジェクトがどのようにバインディングを必要とするかについての詳細情報を提供する BINDINFO 構造体へのポインター。

戻り値

標準 HRESULT 値のいずれか。

解説

既定の実装では、バインディングを非同期にし、データプッシュ モデルを使用するように設定します。 データプッシュ モデルでは、モニカーによって非同期バインド操作が開始され、新しいデータが利用可能になると常にクライアントに継続的に通知されます。

CBindStatusCallback::GetPriority

バインド操作の優先順位を取得するために非同期モニカーによって呼び出されます。

STDMETHOD(GetPriority)(LONG* pnPriority);

パラメーター

pnPriority
[出力] 成功した場合は優先順位を受け取る LONG 変数のアドレス。

戻り値

E_NOTIMPL を返します。

CBindStatusCallback::m_dwAvailableToRead

読み取り可能なバイト数を格納するために使用できます。

DWORD m_dwAvailableToRead;

解説

StartAsyncDownload で 0 に初期化されます。

CBindStatusCallback::m_dwTotalRead

非同期データ転送で読み取られたバイトの累積合計。

DWORD m_dwTotalRead;

解説

OnDataAvailable が呼び出されるたびに、実際に読み取られたバイト数だけインクリメントされます。 StartAsyncDownload で 0 に初期化されます。

CBindStatusCallback::m_pFunc

m_pFunc によって指し示される関数は、OnDataAvailable によって、(たとえば、データを格納したり、画面に出力したりするために) 使用可能なデータが読み取られた後に呼び出されます。

ATL_PDATAAVAILABLE m_pFunc;

解説

m_pFunc によって指し示される関数は、オブジェクトのクラスのメンバーであり、次の構文が使用されます。

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

CBindStatusCallback::m_pT

非同期データ転送を要求するオブジェクトへのポインター。

T* m_pT;

解説

CBindStatusCallback オブジェクトは、このオブジェクトのクラスでテンプレート化されます。

CBindStatusCallback::m_spBindCtx

バインド コンテキスト (特定のモニカー バインディング操作に関する情報を格納するオブジェクト) へのアクセスを提供する IBindCtx インターフェイスへのポインター。

CComPtr<IBindCtx> m_spBindCtx;

解説

StartAsyncDownload で初期化されます。

CBindStatusCallback::m_spBinding

現在のバインド操作の IBinding インターフェイスへのポインター。

CComPtr<IBinding> m_spBinding;

解説

OnStartBinding で初期化され、OnStopBinding で解放されます。

CBindStatusCallback::m_spMoniker

使用する URL の IMoniker インターフェイスへのポインター。

CComPtr<IMoniker> m_spMoniker;

解説

StartAsyncDownload で初期化されます。

CBindStatusCallback::m_spStream

現在のバインド操作の IStream インターフェイスへのポインター。

CComPtr<IStream> m_spStream;

解説

BCSF フラグが BCSF_FIRSTDATANOTIFICATION の場合は、STGMEDIUM 構造体から OnDataAvailable で初期化され、BCSF フラグが BCSF_LASTDATANOTIFICATION の場合は解放されます。

CBindStatusCallback::OnDataAvailable

システム提供の非同期モニカーでは、使用可能になったときにオブジェクトにデータを提供するために OnDataAvailable を呼び出します。

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

パラメーター

grfBSCF
[入力] BSCF 列挙値。 BSCF_FIRSTDATANOTIFICATION、BSCF_INTERMEDIARYDATANOTIFICATION、または BSCF_LASTDATANOTIFICATION のうちの 1 つまたは複数。

dwSize
[入力] バインディングの開始以降に使用できるデータの累積量 (バイト単位)。 0 にすることができます。これは、データの量が関連していないこと、または特定の量が使用できなくなったことを示します。

pformatetc
[入力] 使用可能なデータの形式を格納している FORMATETC 構造体へのポインター。 形式がない場合は、CF_NULL にすることができます。

pstgmed
[入力] 使用できるようになった実際のデータを保持する STGMEDIUM 構造体へのポインター。

戻り値

標準 HRESULT 値のいずれか。

解説

OnDataAvailable ではデータを読み取ってから、オブジェクトのクラスのメソッドを呼び出します (たとえば、データを格納したり、画面に出力したりする場合)。 詳細については、「CBindStatusCallback::StartAsyncDownload」を参照してください。

CBindStatusCallback::OnLowResource

リソースが不足しているときに呼び出されます。

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

パラメーター

dwReserved
予約済み。

戻り値

S_OK を返します。

CBindStatusCallback::OnObjectAvailable

オブジェクト インターフェイス ポインターをアプリケーションに渡すために非同期モニカーによって呼び出されます。

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

パラメーター

riid
要求されたインターフェイスのインターフェイス識別子。 未使用。

punk
IUnknown インターフェイスのアドレス。 未使用。

戻り値

S_OK を返します。

CBindStatusCallback::OnProgress

データのダウンロード プロセスの進行状況を示すために呼び出されます。

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

パラメーター

ulProgress
符号なし長整数。 未使用。

ulProgressMax
符号なし長整数。未使用。

ulStatusCode
符号なし長整数。 未使用。

szStatusText
文字列値のアドレス。 未使用。

戻り値

S_OK を返します。

CBindStatusCallback::OnStartBinding

pBindingIBinding ポインターにデータ メンバー m_spBinding を設定します。

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

パラメーター

dwReserved
将来利用するために予約されています。

pBinding
[入力] 現在のバインド操作の IBinding インターフェイスのアドレス。 これを NULL にすることはできません。 クライアントでは、このポインターで AddRef を呼び出して、バインディング オブジェクトへの参照を保持する必要があります。

CBindStatusCallback::OnStopBinding

データ メンバー m_spBinding 内の IBinding ポインターを解放します。

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

パラメーター

hresult
バインド操作から返された状態コード。

szError
文字列値のアドレス。 未使用。

解説

バインド操作の終了を示すために、システム提供の非同期モニカーによって呼び出されます。

CBindStatusCallback::StartAsyncDownload

指定された URL からデータの非同期ダウンロードを開始します。

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

パラメーター

pT
[入力] 非同期データ転送を要求するオブジェクトへのポインター。 CBindStatusCallback オブジェクトは、このオブジェクトのクラスでテンプレート化されます。

pFunc
[入力] 読み取られるデータを受け取る関数へのポインター。 関数は、T 型のオブジェクトのクラスのメンバーです。 構文と例については、「解説」を参照してください。

bstrURL
[入力] データの取得元の URL。 任意の有効な URL またはファイル名にすることができます。 Nll は指定できません。 次に例を示します。

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

pUnkContainer
[入力] コンテナーの IUnknown。 既定では NULL になります。

bRelative
[入力] URL が相対か絶対かを示すフラグ。 既定では FALSE になります。つまり、URL は絶対です。

戻り値

標準 HRESULT 値のいずれか。

解説

データが使用可能になるたびに、OnDataAvailable を使用してオブジェクトに送信されます。 OnDataAvailable ではデータを読み取り、pFunc によって指し示される関数を呼び出します (たとえば、データを格納したり、画面に出力したりする場合)。

pFunc によって指し示される関数は、オブジェクトのクラスのメンバーであり、次の構文が使用されます。

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

(ASYNC サンプルからの) 次の例では、関数 OnData で受信されたデータがテキスト ボックスに書き込まれます。

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

関連項目

クラスの概要