次の方法で共有


IMAPISupport::IStorageFromStream

適用対象: Outlook 2013 | Outlook 2016

ストリームにアクセスするためのストレージ オブジェクトを実装します。

HRESULT IStorageFromStream(
  LPUNKNOWN lpUnkIn,
  LPCIID lpInterface,
  ULONG ulFlags,
  LPSTORAGE FAR * lppStorageOut
);

パラメーター

lpUnkIn

[in]ストリーム オブジェクトへのポインター。

lpInterface

[in] lpUnkIn が指すストリームへのアクセスに使用するインターフェイスを表すインターフェイス識別子 (IID) へのポインター。 有効な値は、IID_IStream、IID_ILockBytes、 または null のいずれかです。これは、 IStream インターフェイスを使用してストリームにアクセスする必要があることを示します。

ulFlags

[in]ストリーム オブジェクトを基準にしてストレージ オブジェクトを作成する方法を制御するフラグのビットマスク。 既定では、ストレージは読み取り専用アクセスで作成され、ストリームはストレージ内の位置 0 から始まります。 次のフラグを設定できます。

STGSTRM_CREATE

ストリーム オブジェクトに対して新しいストレージ オブジェクトを作成する必要があります。

STGSTRM_CURRENT

ストレージ オブジェクトは、ストリームの現在の位置から開始する必要があります。

STGSTRM_MODIFY

呼び出し元は、返されたストレージ オブジェクトに対する読み取り/書き込みアクセス許可を持っている必要があります。

STGSTRM_RESET

ストレージ オブジェクトは、位置 0 から始まる必要があります。

lppStorageOut

[out]ストレージ オブジェクトへのポインター。

戻り値

S_OK

ストレージ オブジェクトが正常に作成されました。

注釈

IMAPISupport::IStorageFromStream メソッドは、すべてのサービス プロバイダー サポート オブジェクトに対して実装されます。 サービス プロバイダーは 、IStorageFromStream を呼び出して、特定のプロパティを開くために使用するストレージ オブジェクトを作成します。 IStorage インターフェイスの独自の実装を持つサービス プロバイダーは、IStorageFromStream を呼び出す必要はありません。

IStorageFromStream によって作成されたストレージ オブジェクトは、ストリームの IUnknown::AddRef メソッドを呼び出して参照カウントをインクリメントし、ストレージが解放されたときにカウントをデクリメントします。

呼び出し側への注意

オブジェクトの 1 つの IMAPIProp::OpenProperty メソッドを呼び出して IStorage インターフェイスを使用してプロパティを開くときは、次のタスクを実行します。

  1. プロパティの読み取り/書き込みアクセス許可を持つストリーム オブジェクトを開きます。

  2. プロパティ ストリームをストレージ オブジェクトとして内部的にマークします。

  3. IStorageFromStream を呼び出してストレージ オブジェクトを生成します。

  4. このストレージ オブジェクトへのポインターを返します。

ストレージ オブジェクトを使用する追加のインターフェイスを実装する場合は、ストレージ オブジェクトをラップするオブジェクトを作成し、より高いレベルの IUnknown::QueryInterface メソッドを 実装します。

IStorage で作成された場合は、IStream インターフェイスを使用してプロパティを開くことを許可しないでください。 逆に、IStream で作成された場合は、IStorage インターフェイスを使用してプロパティを開くことを許可しないでください。

ただし、 IStreamDocfile インターフェイスを使用してストレージ オブジェクトを別のコンテナーにストリーミングすることもできますが、IID_IStreamDocfile インターフェイス識別子は OpenProperty メソッドの lpInterface パラメーターで渡す必要があります。

関連項目

IMAPIProp::OpenProperty

IMAPISupport: IUnknown