Метод 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 не вернет объект в обычный режим.

Если объект хранилища совпадает с объектом, из который он был загружен или создан, операция сохранения может записывать добавочные изменения в объект хранилища. В противном случае необходимо выполнить полное сохранение.

Этот метод рекурсивно вызывает метод 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
Header objidl.h

См. также раздел

IPersistStorage

OleSave