IPersistStream::Save メソッド (objidl.h)

指定したストリームにオブジェクトを保存します。

構文

HRESULT Save(
  [in] IStream *pStm,
  [in] BOOL    fClearDirty
);

パラメーター

[in] pStm

オブジェクトを保存するストリームへの IStream ポインター。

[in] fClearDirty

保存後にダーティ フラグをクリアするかどうかを示します。 TRUE の場合は、フラグをクリアする必要があります。 FALSE の場合、フラグは変更されません。

戻り値

このメソッドは、次の値を返すことができます。

リターン コード 説明
S_OK
メソッドは正常に完了しました。
STG_E_CANTSAVE
オブジェクト自体をストリームに保存できませんでした。 このエラーは、たとえば、ストリームにシリアル化できない別のオブジェクトがオブジェクトに含まれていることや、 ISequentialStream::Write 呼び出しがSTG_E_CANTSAVE返されたことを示している可能性があります。
STG_E_MEDIUMFULL
ストレージ デバイスに空き領域がないため、オブジェクトを保存できませんでした。

解説

IPersistStream::Save は、オブジェクトを指定されたストリームに保存し、オブジェクトがダーティ フラグをリセットする必要があるかどうかを示します。

シーク ポインターは、オブジェクトがデータの書き込みを開始するストリーム内の場所に配置されます。 オブジェクトは 、ISequentialStream::Write メソッドを呼び出してデータを書き込みます。

終了時に、シーク ポインターはオブジェクト データのすぐ後に配置する必要があります。 エラーが返された場合、シーク ポインターの位置は未定義です。

呼び出し元へのメモ

IPersistStream::Save を直接呼び出す代わりに、通常、次の処理を行う OleSaveToStream ヘルパー関数を呼び出します。
  1. GetClassID を呼び出して、オブジェクトの CLSID を取得します。
  2. WriteClassStm 関数を呼び出して、オブジェクトの CLSID をストリームに書き込みます。
  3. IPersistStream::Save を呼び出します。
これらのメソッドを直接呼び出す場合は、 IPersistStream::Save を呼び出す前に、CLSID の後のストリームに他のデータを書き込むことができます。

OLE で提供される IPersistStream の実装は、この同じパターンに従います。

実装者へのメモ

IPersistStream::Save メソッドでは、CLSID はストリームに書き込まれません。 呼び出し元は CLSID を記述する必要があります。

IPersistStream::Save メソッドは、ストリーム内で読み取り、書き込み、シークを行うことができます。ただし、エントリのシーク ポインターの前にストリーム内の場所をシークすることはできません。

URL モニカーに関するメモ

URL モニカーをストリームに保存します。 URL モニカーのバイナリ形式は、Unicode の URL 文字列です (完全または部分的な URL 文字列である場合があります。詳細については、「 CreateURLMonikerEx 」を参照してください)。 これは、 ULONG の文字数の後に、その多くの Unicode 文字が続くものとして表されます。

要件

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

関連項目

IPersistStream