IMoniker::BindToStorage メソッド (objidl.h)

指定したオブジェクトのストレージにバインドします。 IMoniker::BindToObject メソッドとは異なり、このメソッドはモニカーによって識別されるオブジェクトをアクティブ化しません。

構文

HRESULT BindToStorage(
  [in]  IBindCtx *pbc,
  [in]  IMoniker *pmkToLeft,
  [in]  REFIID   riid,
  [out] void     **ppvObj
);

パラメーター

[in] pbc

バインド コンテキスト オブジェクトの IBindCtx インターフェイスへのポインター。このバインド操作で使用されます。 バインド コンテキストは、バインド プロセス中にバインドされたオブジェクトをキャッシュし、バインド コンテキストを使用するすべての操作に適用されるパラメーターを含み、モニカー実装がその環境に関する情報を取得する手段を提供します。

[in] pmkToLeft

モニカーが複合モニカーの一部である場合は、このモニカーの左側にあるモニカーへのポインター。 このパラメーターは、複合モニカーのさまざまなコンポーネント間の連携を可能にするために、モニカー実装者によって主に使用されます。 モニカー クライアントでは NULL を使用する必要があります。

[in] riid

ppvObj でポインターが返される、要求されたストレージ インターフェイスの識別子への参照。 一般的に要求されるストレージ インターフェイスには、 IStorageIStreamILockBytes があります

[out] ppvObj

riid で要求されたインターフェイス ポインターを受け取るポインター変数のアドレス。 正常に戻ると、*ppvObj には、モニカーが識別するオブジェクトのストレージへの要求されたインターフェイス ポインターが含まれます。 成功した場合、実装ではストレージで AddRef を 呼び出す必要があります。 Release を呼び出すのは呼び出し元の責任です。 エラーが発生した場合、*ppvObjNULL である必要があります。

戻り値

このメソッドは、E_UNEXPECTED標準の戻り値と、次の値を返すことができます。

リターン コード 説明
S_OK
バインド操作が成功しました。
MK_E_NOSTORAGE
このモニカーによって識別されるオブジェクトには、独自のストレージがありません。
MK_E_EXCEEDEDDEADLINE
バインド 操作は、バインド コンテキストの BIND_OPTS 構造体で指定された制限時間内 完了できませんでした。
MK_E_CONNECTMANUALLY
ネットワーク デバイスに接続できなかった可能性があるため、操作をストレージに接続できませんでした。 詳細については、「 IMoniker::BindToObject」を参照してください。
MK_E_INTERMEDIATEINTERFACENOTSUPPORTED
中間オブジェクトが見つかりましたが、バインド操作を完了するために必要なインターフェイスはサポートされていませんでした。 たとえば、項目モニカーは、コンテナーが IOleItemContainer インターフェイスをサポートしていない場合、この値を返します。
STG_E_ACCESSDENIED
ストレージ オブジェクトにアクセスできません。
 

このメソッドは、 IOleItemContainer::GetObject メソッドに関連付けられているエラーを返すこともできます。

注釈

BindToObject メソッドと BindToStorage メソッドには重要な違いがあります。 たとえば、スプレッドシート オブジェクトを識別するモニカーがある場合、 BindToObject を呼び出すとスプレッドシート オブジェクト自体にアクセスできますが、 BindToStorage を呼び出すと、スプレッドシートが存在するストレージ オブジェクトにアクセスできます。

呼び出し元へのメモ

どの COM モニカー クラスもバインド操作でこのメソッドを呼び出しませんが、新しいモニカー クラスの実装で呼び出すのが適切な場合があります。 pmkToLeft パラメーターで識別されたオブジェクトからの情報を必要とし、アクティブ化せずにオブジェクトの永続ストレージから取得できる BindToObject の実装で、このメソッドを呼び出すことができます。 たとえば、モニカーを使用して、コンテナーをアクティブ化せずにアクティブ化できるオブジェクトを識別する場合、この方法が役立つ場合があります。

モニカーが識別するオブジェクトのストレージを読み取ることができるクライアントは、このメソッドを呼び出すこともできます。

実装者へのメモ

実装では、現在のモニカーによって識別されるオブジェクトの永続ストレージを検索し、目的のインターフェイス ポインターを返す必要があります。 一部の種類のモニカーは、独自の永続ストレージを持たないオブジェクトである擬似オブジェクトを表します。 このようなオブジェクトは、コンテナーの内部状態の一部 (スプレッドシート内のセルの範囲など) で構成されます。 モニカー クラスでこの種類のオブジェクトが識別される場合、 BindToStorage の実装はエラー MK_E_NOSTORAGEを返す必要があります。

バインド コンテキストの BIND_OPTS 構造体で BINDFLAGS_JUSTTESTEXISTENCE フラグが指定されている場合、実装には ppvObjNULL を返すオプションがあります (ただし、フラグを無視して完全なバインド操作を実行することもできます)。

実装固有の注意事項

実装 メモ
アンチモニカー このメソッドは、E_NOTIMPLを返します。
クラス モニカー このメソッドは、クラス モニカーの BindToObject に転送されます。
ファイル モニカー このメソッドは、モニカーによって表されるパスで指定されたファイルを開き、そのファイルへの IStorage ポインターを返します。 メソッドは、 IStorage インターフェイスへのバインドのみをサポートしています。 IStream または ILockBytesriid で要求された場合、メソッドは E_UNSPECを返し、他のインターフェイスが要求された場合、このメソッドはE_NOINTERFACEを返します。 pmkToLeft がクラス モニカーでない限り、pmkToLeftIMoniker::BindToObject の実装のように NULL にする必要があります。
汎用複合モニカー このメソッドは、複合の右端のコンポーネントで BindToStorage を再帰的に呼び出し、残りの複合をその呼び出しの pmkToLeft パラメーターとして渡します。
アイテム モニカー pmkToLeftNULL の場合、このメソッドはE_INVALIDARGを返します。 それ以外の場合、メソッドは pmkToLeft パラメーターで IMoniker::BindToObject を呼び出し、IOleItemContainer インターフェイス ポインターを要求します。 次に、 メソッドは、要求されたインターフェイスに対 して IOleItemContainer::GetObjectStorage を呼び出します。
OBJREF モニカー このメソッドは、実行中のオブジェクトを含むストレージ上の要求されたインターフェイスへのマーシャリングされたポインターを取得します。 OBJREF モニカーは実行中のオブジェクトを表しているため、アクティブ化は行われません。 表されたオブジェクトが実行されなくなった場合、 BindToStorage はE_UNEXPECTEDで失敗します。
ポインター モニカー このメソッドは、要求されたインターフェイスのラップされたポインターに対してクエリを実行します。
URL モニカー URL モニカーのシステム実装では、すべての URL のストリーム オブジェクトと、指定されたリソースが複合ファイルである場合のストレージ オブジェクトに 対して BindToStorage がサポートされます。

URL モニカーは非同期バインディングをサポートしているため、 BindToStorage の実際の戻り値は、バインド コンテキストで確立されたオブジェクト パラメーターによって異なる場合があります。 ただし、バインド操作のセマンティクスは、同期または非同期の使用に関係なく、次のように同じです。

  • URL モニカーは、バインド 操作の詳細情報をバインド コンテキストから取得します。 たとえば、モニカーは、バインド コンテキストに登録されている IBindStatusCallback インターフェイスと IEnumFORMATETC インターフェイスへのポインターを取得できます。 詳細については、バインド コンテキストで IBindCtx::SetBindOptions を使用して指定された追加のバインド オプション ( dwTickCountDeadline パラメーター、BIND_MAYBOTHERUSERの grfFlags 値など) を含めることができます。 その後、モニカーは IBindStatusCallback::GetBindInfo を呼び出してクライアントに対してクエリを実行し、トランスポートを使用してバインド操作を開始し、 IBindStatusCallback::OnStartBinding を呼び出して結果の IBinding をクライアントに渡します。
  • 呼び出し元が IBindStatusCallback::GetBindInfo から取得した BINDINFO 構造体で BINDF_ASYNCSTORAGE フラグを指定して非同期 IStream または IStorage を要求した場合、URL モニカーはできるだけ早くオブジェクトを返します。 まだ使用できないデータを参照するこれらの IStorage オブジェクトまたは IStream オブジェクトを呼び出E_PENDING。
  • 呼び出し元が上記のように非同期 IStream または IStorage を指定しない場合でも、URL モニカーはできるだけ早く IBindStatusCallback::OnDataAvailable メソッドを介してオブジェクトを返します。 ただし、まだ使用できないデータを参照するこれらのオブジェクトの呼び出しは、データが使用可能になるまでブロックされます。 一部のアプリケーションでは、既存の I/O コードを最小限に変更する必要があります。それでも、アクセス パターンによってはパフォーマンスが向上する可能性があります。

要件

要件
サポートされている最小のクライアント Windows 2000 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー objidl.h

こちらもご覧ください

Imoniker