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 でポインターが返される、要求されたストレージ インターフェイスの識別子への参照。 一般的に要求されるストレージ インターフェイスには、 IStorage、 IStream、 ILockBytes があります。
[out] ppvObj
riid で要求されたインターフェイス ポインターを受け取るポインター変数のアドレス。 正常に戻ると、*ppvObj には、モニカーが識別するオブジェクトのストレージへの要求されたインターフェイス ポインターが含まれます。 成功した場合、実装ではストレージで AddRef を 呼び出す必要があります。 Release を呼び出すのは呼び出し元の責任です。 エラーが発生した場合、*ppvObj は NULL である必要があります。
戻り値
このメソッドは、E_UNEXPECTED標準の戻り値と、次の値を返すことができます。
リターン コード | 説明 |
---|---|
|
バインド操作が成功しました。 |
|
このモニカーによって識別されるオブジェクトには、独自のストレージがありません。 |
|
バインド 操作は、バインド コンテキストの BIND_OPTS 構造体で指定された制限時間内 に 完了できませんでした。 |
|
ネットワーク デバイスに接続できなかった可能性があるため、操作をストレージに接続できませんでした。 詳細については、「 IMoniker::BindToObject」を参照してください。 |
|
中間オブジェクトが見つかりましたが、バインド操作を完了するために必要なインターフェイスはサポートされていませんでした。 たとえば、項目モニカーは、コンテナーが IOleItemContainer インターフェイスをサポートしていない場合、この値を返します。 |
|
ストレージ オブジェクトにアクセスできません。 |
このメソッドは、 IOleItemContainer::GetObject メソッドに関連付けられているエラーを返すこともできます。
注釈
BindToObject メソッドと BindToStorage メソッドには重要な違いがあります。 たとえば、スプレッドシート オブジェクトを識別するモニカーがある場合、 BindToObject を呼び出すとスプレッドシート オブジェクト自体にアクセスできますが、 BindToStorage を呼び出すと、スプレッドシートが存在するストレージ オブジェクトにアクセスできます。
呼び出し元へのメモ
どの COM モニカー クラスもバインド操作でこのメソッドを呼び出しませんが、新しいモニカー クラスの実装で呼び出すのが適切な場合があります。 pmkToLeft パラメーターで識別されたオブジェクトからの情報を必要とし、アクティブ化せずにオブジェクトの永続ストレージから取得できる BindToObject の実装で、このメソッドを呼び出すことができます。 たとえば、モニカーを使用して、コンテナーをアクティブ化せずにアクティブ化できるオブジェクトを識別する場合、この方法が役立つ場合があります。モニカーが識別するオブジェクトのストレージを読み取ることができるクライアントは、このメソッドを呼び出すこともできます。
実装者へのメモ
実装では、現在のモニカーによって識別されるオブジェクトの永続ストレージを検索し、目的のインターフェイス ポインターを返す必要があります。 一部の種類のモニカーは、独自の永続ストレージを持たないオブジェクトである擬似オブジェクトを表します。 このようなオブジェクトは、コンテナーの内部状態の一部 (スプレッドシート内のセルの範囲など) で構成されます。 モニカー クラスでこの種類のオブジェクトが識別される場合、 BindToStorage の実装はエラー MK_E_NOSTORAGEを返す必要があります。バインド コンテキストの BIND_OPTS 構造体で BINDFLAGS_JUSTTESTEXISTENCE フラグが指定されている場合、実装には ppvObj で NULL を返すオプションがあります (ただし、フラグを無視して完全なバインド操作を実行することもできます)。
実装固有の注意事項
実装 | メモ |
---|---|
アンチモニカー | このメソッドは、E_NOTIMPLを返します。 |
クラス モニカー | このメソッドは、クラス モニカーの BindToObject に転送されます。 |
ファイル モニカー | このメソッドは、モニカーによって表されるパスで指定されたファイルを開き、そのファイルへの IStorage ポインターを返します。 メソッドは、 IStorage インターフェイスへのバインドのみをサポートしています。 IStream または ILockBytes が riid で要求された場合、メソッドは E_UNSPECを返し、他のインターフェイスが要求された場合、このメソッドはE_NOINTERFACEを返します。 pmkToLeft がクラス モニカーでない限り、pmkToLeft は IMoniker::BindToObject の実装のように NULL にする必要があります。 |
汎用複合モニカー | このメソッドは、複合の右端のコンポーネントで BindToStorage を再帰的に呼び出し、残りの複合をその呼び出しの pmkToLeft パラメーターとして渡します。 |
アイテム モニカー | pmkToLeft が NULL の場合、このメソッドはE_INVALIDARGを返します。 それ以外の場合、メソッドは pmkToLeft パラメーターで IMoniker::BindToObject を呼び出し、IOleItemContainer インターフェイス ポインターを要求します。 次に、 メソッドは、要求されたインターフェイスに対 して IOleItemContainer::GetObjectStorage を呼び出します。 |
OBJREF モニカー | このメソッドは、実行中のオブジェクトを含むストレージ上の要求されたインターフェイスへのマーシャリングされたポインターを取得します。 OBJREF モニカーは実行中のオブジェクトを表しているため、アクティブ化は行われません。 表されたオブジェクトが実行されなくなった場合、 BindToStorage はE_UNEXPECTEDで失敗します。 |
ポインター モニカー | このメソッドは、要求されたインターフェイスのラップされたポインターに対してクエリを実行します。 |
URL モニカー |
URL モニカーのシステム実装では、すべての URL のストリーム オブジェクトと、指定されたリソースが複合ファイルである場合のストレージ オブジェクトに 対して BindToStorage がサポートされます。
URL モニカーは非同期バインディングをサポートしているため、 BindToStorage の実際の戻り値は、バインド コンテキストで確立されたオブジェクト パラメーターによって異なる場合があります。 ただし、バインド操作のセマンティクスは、同期または非同期の使用に関係なく、次のように同じです。
|
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 2000 Professional [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows 2000 Server [デスクトップ アプリのみ] |
対象プラットフォーム | Windows |
ヘッダー | objidl.h |