次の方法で共有


CAsyncMonikerFile クラス

ActiveX コントロール (以前の OLE コントロール) で非同期モニカーを使用するための機能が用意されています。

構文

class CAsyncMonikerFile : public CMonikerFile

メンバー

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

名前 説明
CAsyncMonikerFile::CAsyncMonikerFile CAsyncMonikerFile オブジェクトを構築します。

パブリック メソッド

名前 説明
CAsyncMonikerFile::Close すべてのリソースを閉じて解放します。
CAsyncMonikerFile::GetBinding 非同期転送バインディングへのポインターを取得します。
CAsyncMonikerFile::GetFormatEtc ストリーム内のデータの形式を取得します。
CAsyncMonikerFile::Open ファイルを非同期的に開きます。

保護メソッド

名前 説明
CAsyncMonikerFile::CreateBindStatusCallback IBindStatusCallbackを実装する COM オブジェクトを作成します。
CAsyncMonikerFile::GetBindInfo 作成するバインドの種類に関する情報を要求するために、OLE システム ライブラリによって呼び出されます。
CAsyncMonikerFile::GetPriority バインドの優先順位を取得するために OLE システム ライブラリによって呼び出されます。
CAsyncMonikerFile::OnDataAvailable 非同期バインド操作中にクライアントが使用できるようになると、データを提供するために呼び出されます。
CAsyncMonikerFile::OnLowResource リソースが不足しているときに呼び出されます。
CAsyncMonikerFile::OnProgress データのダウンロード プロセスの進行状況を示すために呼び出されます。
CAsyncMonikerFile::OnStartBinding バインドの開始時に呼び出されます。
CAsyncMonikerFile::OnStopBinding 非同期転送が停止されたときに呼び出されます。

解説

CMonikerFile から派生し、COleStreamFile から派生CAsyncMonikerFileは、IMoniker インターフェイスを使用して、URL からファイルを非同期的に読み込むなど、データ ストリームに非同期的にアクセスします。 ファイルには、ActiveX コントロールのデータパス プロパティを指定できます。

非同期モニカーは、主にインターネット対応アプリケーションと ActiveX コントロールで使用され、ファイル転送中に応答性の高いユーザー インターフェイスを提供します。 その代表的な例が、ActiveX コントロールに非同期のプロパティを提供する CDataPathProperty の使用です。 CDataPathProperty オブジェクトは、長いプロパティ交換プロセス中に新しいデータの可用性を示すコールバックを繰り返し取得します。

インターネット アプリケーションで非同期モニカーと ActiveX コントロールを使用する方法の詳細については、次の記事を参照してください。

継承階層

CObject

CFile

COleStreamFile

CMonikerFile

CAsyncMonikerFile

要件

ヘッダー: afxole.h

CAsyncMonikerFile::CAsyncMonikerFile

CAsyncMonikerFile オブジェクトを構築します。

CAsyncMonikerFile();

解説

IBindHost インターフェイスは作成されません。 IBindHost は、 Open メンバー関数で指定した場合にのみ使用されます。

IBindHost インターフェイスの説明については、Windows SDK を参照してください。

CAsyncMonikerFile::Close

この関数を呼び出して、すべてのリソースを閉じて解放します。

virtual void Close();

解説

開いていないファイルまたは既に閉じているファイルで呼び出すことができます。

CAsyncMonikerFile::CreateBindStatusCallback

IBindStatusCallbackを実装する COM オブジェクトを作成します。

virtual IUnknown* CreateBindStatusCallback(IUnknown* pUnkControlling);

パラメーター

pUnkControlling
集計が使用されていない場合は、制御する不明 (外側の IUnknown) または NULL へのポインター。

戻り値

pUnkControlling が NULL でない場合、この関数は、IBindStatusCallbackをサポートする新しい COM オブジェクトの内部IUnknownへのポインターを返します。 pUnkControllingが NULL の場合、関数は、IBindStatusCallbackをサポートする新しい COM オブジェクトのIUnknownへのポインターを返します。

解説

CAsyncMonikerFile には、 IBindStatusCallbackを実装する COM オブジェクトが必要です。 MFC はこのようなオブジェクトを実装し、集計可能です。 CreateBindStatusCallbackをオーバーライドして、独自の COM オブジェクトを返すことができます。 COM オブジェクトは、制御する不明な COM オブジェクトを使用して CreateBindStatusCallback を呼び出すことによって、MFC の実装を集計できます。 CCmdTarget COM サポートを使用して実装された COM オブジェクトは、CCmdTarget::GetControllingUnknownを使用して制御不明を取得できます。

または、COM オブジェクトは、 CreateBindStatusCallback( NULL )を呼び出すことによって MFC の実装に委任できます。

CAsyncMonikerFile::OpenCreateBindStatusCallbackを呼び出します。

非同期モニカーと非同期バインディングの詳細については、 IBindStatusCallback インターフェイスと 非同期バインディングとストレージ作業を参照してください。 集計の詳細については、「 Aggregation」を参照してください。 3 つのトピックはすべて Windows SDK に含まれています。

CAsyncMonikerFile::GetBindInfo

非同期モニカーのクライアントから呼び出され、非同期モニカーにバインドする方法を伝えます。

virtual DWORD GetBindInfo() const;

戻り値

IBindStatusCallBackの設定を取得します。 IBindStatusCallback インターフェイスの説明については、Windows SDK を参照してください。

解説

既定の実装では、バインディングを非同期に設定し、ストレージ メディア (ストリーム) を使用し、データ プッシュ モデルを使用します。 バインディングの動作を変更する場合は、この関数をオーバーライドします。

これを行う理由の 1 つは、データ プッシュ モデルではなく、データ プル モデルを使用してバインドすることです。 データ プル モデルでは、クライアントはバインド操作を実行し、モニカーは読み取り時にのみデータをクライアントに提供します。 データ プッシュ モデルでは、モニカーは非同期バインド操作を実行し、新しいデータが使用可能になると常にクライアントに継続的に通知します。

CAsyncMonikerFile::GetBinding

非同期転送バインディングへのポインターを取得するには、この関数を呼び出します。

IBinding* GetBinding() const;

戻り値

非同期転送の開始時に提供される IBinding インターフェイスへのポインター。 何らかの理由で転送を非同期に実行できない場合は NULL を返します。

解説

これにより、IBinding::AbortIBinding::PauseIBinding::Resumeなど、IBinding インターフェイスを介してデータ転送プロセスを制御できます。

IBinding インターフェイスの説明については、Windows SDK を参照してください。

CAsyncMonikerFile::GetFormatEtc

ストリーム内のデータの形式を取得するには、この関数を呼び出します。

FORMATETC* GetFormatEtc() const;

戻り値

現在開いているストリームの Windows 構造体 FORMATETC へのポインター。 モニカーがバインドされていない場合、非同期でない場合、または非同期操作が開始されていない場合は NULL を返します。

CAsyncMonikerFile::GetPriority

バインディング 処理がバインディング操作のスレッドに与えられた優先順位の受信を開始すると、非同期モニカーのクライアントから呼び出されます。

virtual LONG GetPriority() const;

戻り値

非同期転送が行われる優先順位。 標準スレッド優先度フラグの 1 つ:THREAD_PRIORITY_ABOVE_NORMAL、THREAD_PRIORITY_BELOW_NORMAL、THREAD_PRIORITY_HIGHEST、THREAD_PRIORITY_IDLE、THREAD_PRIORITY_LOWEST、THREAD_PRIORITY_NORMAL、およびTHREAD_PRIORITY_TIME_CRITICAL。 これらの値の説明については、Windows 関数 SetThreadPriority を参照してください。

解説

GetPriority を直接呼び出すべきではありません。 THREAD_PRIORITY_NORMALは、既定の実装によって返されます。

CAsyncMonikerFile::OnDataAvailable

非同期モニカーは OnDataAvailable を呼び出して、非同期バインド操作中に使用可能になったときにクライアントにデータを提供します。

virtual void OnDataAvailable(DWORD dwSize, DWORD bscfFlag);

パラメーター

dwSize
バインディングの開始以降に使用可能なデータの累積量 (バイト単位)。 0 を指定できます。データ量が操作に関連しないか、特定の量が使用できなくなったことを示します。

bscfFlag
BSCF 列挙値。 次の値のうち 1 つ以上を指定できます。

  • BSCF_FIRSTDATANOTIFICATION 特定のバインド操作に対する OnDataAvailable の最初の呼び出しを識別します。

  • BSCF_INTERMEDIATEDATANOTIFICATION バインド操作の OnDataAvailable の中間呼び出しを識別します。

  • BSCF_LASTDATANOTIFICATION バインド操作の OnDataAvailable の最後の呼び出しを識別します。

解説

この関数の既定の実装は、何も行いません。 実装例については、次の例を参照してください。

void CMyMoniker::OnDataAvailable(DWORD dwSize, DWORD bscfFlag)
{
   if ((bscfFlag & BSCF_FIRSTDATANOTIFICATION) != 0)
   {
      m_dwReadBefore = 0;
      m_strText.Empty();
   }

   DWORD dwArriving = dwSize - m_dwReadBefore;

   if (dwArriving > 0)
   {
      int nLen = m_strText.GetLength();
      ASSERT((DWORD)nLen == m_dwReadBefore);
      LPTSTR psz = m_strText.GetBuffer(nLen + dwArriving);
      Read(psz + nLen, dwArriving);
      m_strText.ReleaseBuffer(nLen + dwArriving);
      m_dwReadBefore = dwSize;
   }
}

CAsyncMonikerFile::OnLowResource

リソースが少ない場合にモニカーによって呼び出されます。

virtual void OnLowResource();

解説

既定の実装では、 GetBinding( )-> Abort( )が呼び出されます。

CAsyncMonikerFile::OnProgress

このバインド操作の現在の進行状況を示すためにモニカーによって繰り返し呼び出されます。通常は、長い操作中に妥当な間隔で呼び出されます。

virtual void OnProgress(
    ULONG ulProgress,
    ULONG ulProgressMax,
    ULONG ulStatusCode,
    LPCTSTR szStatusText);

パラメーター

ulProgress
バインド操作の現在の進行状況を、 ulProgressMaxで示される予想される最大値に対して相対的に示します。

ulProgressMax
この操作のOnProgressの呼び出しの間ulProgressの予想される最大値を示します。

ulStatusCode
バインド操作の進行状況に関する追加情報を提供します。 有効な値は、 BINDSTATUS 列挙体から取得されます。 使用可能な値については、「解説」を参照してください。

szStatusText
ulStatusCodeの値に応じて、現在の進行状況に関する情報。 使用可能な値については、「解説」を参照してください。

解説

ulStatusCode (および各値の szStatusText) に使用できる値は次のとおりです。

説明
BINDSTATUS_FINDINGRESOURCE バインド操作では、バインドされているオブジェクトまたはストレージを保持するリソースが見つかっています。 szStatusText は、検索対象のリソースの表示名 ("www.microsoft.com" など) を提供します。
BINDSTATUS_CONNECTING バインド操作は、バインドされているオブジェクトまたはストレージを保持するリソースに接続しています。 szStatusText は、接続先のリソースの表示名 (IP アドレスなど) を提供します。
BINDSTATUS_SENDINGREQUEST バインド操作は、バインドされているオブジェクトまたはストレージを要求しています。 szStatusText は、オブジェクトの表示名 (ファイル名など) を提供します。
BINDSTATUS_REDIRECTING バインド操作が別のデータの場所にリダイレクトされました。 szStatusTextは、新しいデータの場所の表示名を提供します。
BINDSTATUS_USINGCACHEDCOPY バインド操作は、キャッシュされたコピーから要求されたオブジェクトまたはストレージを取得しています。 szStatusText は NULL です。
BINDSTATUS_BEGINDOWNLOADDATA バインド操作が、バインドされているオブジェクトまたはストレージの受信を開始しました。 szStatusTextは、データの場所の表示名を提供します。
BINDSTATUS_DOWNLOADINGDATA バインド操作は、バインドされているオブジェクトまたはストレージを引き続き受け取ります。 szStatusTextは、データの場所の表示名を提供します。
BINDSTATUS_ENDDOWNLOADDATA バインド操作は、バインドされているオブジェクトまたはストレージの受信を完了しました。 szStatusTextは、データの場所の表示名を提供します。
BINDSTATUS_CLASSIDAVAILABLE バインド先のオブジェクトのインスタンスが作成されようとしています。 szStatusText は、新しいオブジェクトの CLSID を文字列形式で提供し、必要に応じてクライアントがバインド操作を取り消すことができます。

CAsyncMonikerFile::OnStartBinding

バインドの開始時にアクションを実行するには、派生クラスでこの関数をオーバーライドします。

virtual void OnStartBinding();

解説

この関数はモニカーによって呼び出されます。 既定の実装では、何も行われません。

CAsyncMonikerFile::OnStopBinding

バインド操作の終了時にモニカーによって呼び出されます。

virtual void OnStopBinding(HRESULT hresult, LPCTSTR szError);

パラメーター

hresult
エラー値または警告値である HRESULT。

szErrort
エラーを説明する文字列。

解説

転送が停止したときにアクションを実行するには、この関数をオーバーライドします。 既定では、関数は IBindingを解放します。

IBinding インターフェイスの説明については、Windows SDK を参照してください。

CAsyncMonikerFile::Open

このメンバー関数を呼び出して、ファイルを非同期的に開きます。

virtual BOOL Open(
    LPCTSTR lpszURL,
    CFileException* pError = NULL);

virtual BOOL Open(
    IMoniker* pMoniker,
    CFileException* pError = NULL);

virtual BOOL Open(
    LPCTSTR lpszURL,
    IBindHost* pBindHost,
    CFileException* pError = NULL);

virtual BOOL Open(
    IMoniker* pMoniker,
    IBindHost* pBindHost,
    CFileException* pError = NULL);

virtual BOOL Open(
    LPCTSTR lpszURL,
    IServiceProvider* pServiceProvider,
    CFileException* pError = NULL);

virtual BOOL Open(
    IMoniker* pMoniker,
    IServiceProvider* pServiceProvider,
    CFileException* pError = NULL);

virtual BOOL Open(
    LPCTSTR lpszURL,
    IUnknown* pUnknown,
    CFileException* pError = NULL);

virtual BOOL Open(
    IMoniker* pMoniker,
    IUnknown* pUnknown,
    CFileException* pError = NULL);

パラメーター

lpszURL
非同期で開くファイルへのポインター。 ファイルには、任意の有効な URL またはファイル名を指定できます。

pError
ファイル例外へのポインター。 エラーが発生した場合は、原因に設定されます。

pMoniker
非同期モニカー インターフェイス IMonikerへのポインター。 IOleClientSite::GetMoniker(OLEWHICHMK_CONTAINER)で取得できるドキュメント独自のモニカーと、パス名から作成されたモニカーの組み合わせである正確なモニカー。 コントロールはこのモニカーを使用してバインドできますが、これはコントロールが保存する必要があるモニカーではありません。

pBindHost
潜在的に相対パス名からモニカーを作成するために使用される IBindHost インターフェイスへのポインター。 バインド ホストが無効な場合、またはモニカーを提供しない場合、呼び出しは既定で Open(lpszFileName,pError) に設定されます。 IBindHost インターフェイスの説明については、Windows SDK を参照してください。

pServiceProvider
IServiceProvider インターフェイスへのポインター。 サービス プロバイダーが無効であるか、 IBindHostのサービスの提供に失敗した場合、呼び出しは既定で Open(lpszFileName,pError) に設定されます。

pUnknown
IUnknown インターフェイスへのポインター。 IServiceProviderが見つかった場合、関数はIBindHostを照会します。 サービス プロバイダーが無効であるか、 IBindHostのサービスの提供に失敗した場合、呼び出しは既定で Open(lpszFileName,pError) に設定されます。

戻り値

ファイルが正常に開かれた場合は 0 以外。それ以外の場合は 0。

解説

この呼び出しにより、バインド プロセスが開始されます。

lpszURL パラメーターには URL またはファイル名を使用できます。 次に例を示します。

CMyMoniker *pMyMoniker = new CMyMoniker();
pMyMoniker->Open(_T("http://www.microsoft.com"));

または

CMyMoniker *pMyMoniker = new CMyMoniker();
pMyMoniker->Open(_T("file:c:\\mydata.dat"));

関連項目

CMonikerFile クラス
階層図
CMonikerFile クラス
CDataPathProperty クラス