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 コントロールを使用する方法の詳細については、次の記事を参照してください。
継承階層
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::Open は CreateBindStatusCallback
を呼び出します。
非同期モニカーと非同期バインディングの詳細については、 IBindStatusCallback インターフェイスと 非同期バインディングとストレージ作業を参照してください。 集計の詳細については、「 Aggregation」を参照してください。 3 つのトピックはすべて Windows SDK に含まれています。
CAsyncMonikerFile::GetBindInfo
非同期モニカーのクライアントから呼び出され、非同期モニカーにバインドする方法を伝えます。
virtual DWORD GetBindInfo() const;
戻り値
IBindStatusCallBack
の設定を取得します。 IBindStatusCallback
インターフェイスの説明については、Windows SDK を参照してください。
解説
既定の実装では、バインディングを非同期に設定し、ストレージ メディア (ストリーム) を使用し、データ プッシュ モデルを使用します。 バインディングの動作を変更する場合は、この関数をオーバーライドします。
これを行う理由の 1 つは、データ プッシュ モデルではなく、データ プル モデルを使用してバインドすることです。 データ プル モデルでは、クライアントはバインド操作を実行し、モニカーは読み取り時にのみデータをクライアントに提供します。 データ プッシュ モデルでは、モニカーは非同期バインド操作を実行し、新しいデータが使用可能になると常にクライアントに継続的に通知します。
CAsyncMonikerFile::GetBinding
非同期転送バインディングへのポインターを取得するには、この関数を呼び出します。
IBinding* GetBinding() const;
戻り値
非同期転送の開始時に提供される IBinding
インターフェイスへのポインター。 何らかの理由で転送を非同期に実行できない場合は NULL を返します。
解説
これにより、IBinding::Abort
、IBinding::Pause
、IBinding::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"));