次の方法で共有


IHolder::Close メソッド (comsvcs.h)

ホルダーを閉じます。

構文

HRESULT Close();

戻り値

このメソッドは、成功すると S_OK を返します。 そうでない場合は、HRESULT エラー コードを返します。

注釈

これにより、リソース ディスペンサーのホルダーが閉じ、その後、リソース ディスペンサーが解放される可能性があります。

終了する前に、リソース ディスペンサーの IDispenserDriver::D estroyResource メソッドに戻すことで、残りのインベントリが破棄されます。

次のシーケンスでは、リソース ディスペンサーを閉じる方法について説明します。

  1. リソース ディスペンサー ( IDispenserDriver を公開するオブジェクト) への参照を取得します。
  2. 実装で IHolder::Close を呼び出す Resource ディスペンサーでメソッドを呼び出します。
  3. IHolder::Close は、Resource ディスペンサーの IDispenserDriver::D estroyResource メソッドに戻すことで、残りのインベントリを破棄します。
  4. IHolder::Close は ディスペンサー マネージャーを呼び出して、このホルダーをホルダーリストから削除します。 (保持者が残っていない場合、ディスペンサー マネージャ オブジェクトはそれ自体を削除します。
  5. IHolder::Close は、リソース ディスペンサーの IDispenserDriver インターフェイスへの参照を解放します。 これは、手順 1 で参照が必要な理由です。それ以外の場合、リソース ディスペンサーは、後続の手順を完了する前に、それ自体を途中で削除します。
  6. IHolder::Close はリソース ディスペンサーに戻ります。
  7. リソース ディスペンサーは IDispenserDriver::D estroyResource を呼び出します。 所有者がそれ自体を削除するようになりました。
  8. 手順 2 で呼び出されたメソッドは を返すようになりました。
  9. リソース ディスペンサーへの最後の参照を解放します。これで、それ自体が削除されます。
IDispenserManager::RegisterDispenser メソッドは、その pDispenserDriver オブジェクトで AddRef を呼び出しませんが、IHolder::ClosepDispenserDriverリリースを実行します。 これにより、リソース ディスペンサー オブジェクトが途中で破棄される可能性があります。 この早期破棄を防ぐために、 IHolder::Close の呼び出し元は、手順 1 と 5 で説明されているように、Resource Dispenser オブジェクトへの参照を保持する必要があります。

要件

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

こちらもご覧ください

IDispenserDriver

IDispenserManager

IHolder