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

オブジェクトと、そのオブジェクトに含まれる入れ子になったオブジェクトを、指定されたストレージ オブジェクトに保存します。 オブジェクトが NoScribble モードになります。

構文

HRESULT Save(
  [in] IStorage *pStgSave,
  [in] BOOL     fSameAsLoad
);

パラメーター

[in] pStgSave

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

[in] fSameAsLoad

IPersistStorage::InitNew、IPersistStorage::Load、または IPersistStorage::SaveCompleted のいずれかの呼び出しによってオブジェクトに渡された、指定されたストレージが現在のストレージであるかどうかを示します。

このパラメーターは、名前を付けて保存またはコピー先の保存操作を実行する場合、または完全保存を実行する場合は FALSE に設定されます。 後者の場合、このメソッドは一時ファイルに保存し、元のファイルを削除し、一時ファイルの名前を変更します。

このパラメーターは、メモリ不足の状況で完全保存を実行する場合、またはダーティ コンポーネントのみが保存される高速増分保存を実行する場合は TRUE に設定されます。

戻り値

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

リターン コード 説明
S_OK
メソッドは正常に完了しました。
STG_E_MEDIUMFULL
ディスクに空き領域がないため、オブジェクトは保存されませんでした。
E_FAIL
ディスク領域の不足以外のエラーにより、オブジェクトを保存できませんでした。

注釈

このメソッドは、オブジェクトとそのオブジェクトに含まれる入れ子になったオブジェクトを、指定されたストレージに保存します。 また、オブジェクトは NoScribble モードになります。 したがって、 IPersistStorage::SaveCompleted メソッドの後続の呼び出しがオブジェクトを Normal モードに戻すまで、オブジェクトはストレージに書き込めません。

ストレージ オブジェクトが、読み込み元または作成元のストレージ オブジェクトと同じ場合、保存操作でストレージ オブジェクトに増分変更を書き込むことができます。 それ以外の場合は、完全な保存を行う必要があります。

このメソッドは、入れ子になったオブジェクトを保存するために 、IPersistStorage::Save メソッド、 OleSave 関数、または IStorage::CopyTo メソッドを再帰的に呼び出します。

このメソッドは 、IStorage::Commit メソッドを呼び出しません。 CLSID はストレージ オブジェクトに書き込まれません。 これらのタスクはどちらも呼び出し元の責任です。

呼び出し元へのメモ

IPersistStorage::Save を直接呼び出す代わりに、通常、次の手順を実行する OleSave ヘルパー関数を呼び出します。
  1. WriteClassStg 関数を呼び出して、オブジェクトのクラス識別子をストレージに書き込みます。
  2. IPersistStorage::Save メソッドを呼び出します。
  3. 必要に応じて、ストレージ オブジェクトで IStorage::Commit メソッドを呼び出します。
次に、コンテナー アプリケーションは、保存を完了するために必要なその他の操作を実行し、各オブジェクトに対して SaveCompleted メソッドを呼び出します。

埋め込みオブジェクトが入れ子になったオブジェクトに IPersistStorage::Save メソッドを渡す場合、入れ子になったオブジェクトに対してこのメソッドを呼び出す前に 、その IPersistStorage::SaveCompleted メソッドの呼び出しを受け取る必要があります。

要件

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

こちらもご覧ください

IPersistStorage

OleSave