Метод IPersistStorage::Load (objidl.h)

Загружает объект из существующего хранилища.

Синтаксис

HRESULT Load(
  [in] IStorage *pStg
);

Параметры

[in] pStg

Указатель IStorage на существующее хранилище, из которого должен быть загружен объект.

Возвращаемое значение

Этот метод может возвращать следующие значения.

Код возврата Описание
S_OK
Метод завершился успешно.
CO_E_ALREADYINITIALIZED
Объект уже инициализирован предыдущим вызовом метода IPersistStorage::Load или метода IPersistStorage::InitNew .
E_OUTOFMEMORY
Объект не был загружен из-за нехватки памяти.
E_FAIL
Объект не был загружен по какой-либо причине, кроме нехватки памяти.

Комментарии

Этот метод инициализирует объект из существующего хранилища. Объект помещается в загруженное состояние, если этот метод вызывается приложением-контейнером. При вызове обработчиком по умолчанию этот метод переводит объект в состояние выполнения.

Обработчик по умолчанию или сам объект может удерживать указатель IStorage во время загрузки или выполнения объекта.

Примечания к вызывающим абонентам

Вместо прямого вызова IPersistStorage::Load обычно вызывается вспомогающая функция OleLoad , которая выполняет следующие действия:
  1. Создайте неинициализированный экземпляр класса объекта.
  2. Запросите новый экземпляр для интерфейса IPersistStorage .
  3. Вызовите Load , чтобы инициализировать объект из существующего хранилища.
Этот метод также вызывается косвенно при вызове функции OleCreateFromData или OleCreateFromFile для вставки объекта в составной файл (как в операции перетаскивания или вставки буфера обмена).

Контейнер должен кэшировать указатель IPersistStorage для использования в последующих операциях с объектом .

Примечания для разработчиков

Чтобы загрузить объект, реализация должна выполнить следующие действия:
  1. Откройте потоки объекта в объекте хранилища и считайте необходимые данные во внутренние структуры данных объекта.
  2. Снимите флаг грязное объекта.
  3. Вызовите метод AddRef и кэшируйте переданный в хранилище указатель.
  4. Не закрывайте и кэшируйте указатели на все потоки или хранилища, которые объекту потребуется сохранить в этом хранилище.
  5. Выполните любую другую инициализацию по умолчанию, необходимую для объекта .
Шаги 3 и 4 особенно важны для обеспечения того, чтобы объект смог сохранить себя при нехватке памяти. Удержание указателей на интерфейсы хранилища и потока гарантирует, что операция сохранения в этом хранилище не завершится ошибкой из-за нехватки памяти.

Реализация этого метода должна возвращать код ошибки CO_E_ALREADYINITIALIZED, если она получает вызов метода IPersistStorage::InitNew или метода IPersistStorage::Load после его инициализации.

Требования

Требование Значение
Минимальная версия клиента Windows 2000 Professional [только классические приложения]
Минимальная версия сервера Windows 2000 Server [только классические приложения]
Целевая платформа Windows
Header objidl.h

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

IPersistStorage

OleLoad