Поделиться через


IMAPISupport::IStorageFromStream

Область применения: Outlook 2013 | Outlook 2016

Реализует объект хранилища для доступа к потоку.

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

Параметры

lpUnkIn

[в] Указатель на объект потока.

lpInterface

[в] Указатель на идентификатор интерфейса (IID), представляющий интерфейс, используемый для доступа к потоку, на который указывает lpUnkIn. Допустимы любые из следующих значений: IID_IStream, IID_ILockBytes или NULL, что указывает на то, что для доступа к потоку должен использоваться интерфейс IStream .

ulFlags

[в] Битовая маска флагов, управляющая способом создания объекта хранилища относительно объекта потока. По умолчанию хранилище создается с доступом только для чтения, а поток начинается с нулевой позиции в хранилище. Можно задать следующие флаги:

STGSTRM_CREATE

Для объекта stream должен быть создан новый объект хранилища.

STGSTRM_CURRENT

Объект хранилища должен начинаться с текущей позиции потока.

STGSTRM_MODIFY

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

STGSTRM_RESET

Объект хранилища должен начинаться с нулевой позиции.

lppStorageOut

[out] Указатель на указатель на объект хранилища.

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

S_OK

Объект хранилища успешно создан.

Замечания

Метод IMAPISupport::IStorageFromStream реализован для всех объектов поддержки поставщика услуг. Поставщики услуг вызывают IStorageFromStream , чтобы создать объект хранилища, используемый для открытия определенных свойств. Поставщикам служб, имеющим собственную реализацию интерфейса IStorage , не нужно вызывать IStorageFromStream.

Объект хранилища, созданный IStorageFromStream , вызывает метод IUnknown::AddRef потока для увеличения числа ссылок, а затем уменьшает число при освобождении хранилища.

Примечания для вызывающих методов

При вызове метода IMAPIProp::OpenProperty одного из объектов для открытия свойства с интерфейсом IStorage выполните следующие задачи:

  1. Откройте объект потока с разрешением на чтение и запись для свойства .

  2. Внутренне пометьте поток свойств как объект хранилища.

  3. Вызовите IStorageFromStream , чтобы создать объект хранилища.

  4. Возвращает указатель на этот объект хранилища.

Если вы реализуете дополнительные интерфейсы, использующие объект хранилища, создайте объект, который обключает объект хранилища и реализует метод IUnknown::QueryInterface более высокого уровня.

Не разрешайте открытие свойства с помощью интерфейса IStream , если оно было создано с помощью IStorage. И наоборот, не разрешайте открытие свойства с помощью интерфейса IStorage , если оно было создано с помощью IStream.

За одним исключением допустимо использовать интерфейс IStreamDocfile для потоковой передачи объекта хранилища из одного контейнера в другой, но идентификатор IID_IStreamDocfile интерфейса должен передаваться в параметре lpInterface метода OpenProperty.

См. также

IMAPIProp::OpenProperty

IMAPISupport: IUnknown