Интерфейсы сохраняемости

Объекты с постоянным состоянием любого типа должны реализовать по крайней мере один интерфейс IPersist* и предпочтительно несколько интерфейсов, чтобы предоставить контейнеру наиболее гибкий выбор способа сохранения состояния элемента управления.

Если элемент управления имеет постоянное состояние в любом случае, он должен, как минимум, реализовать IPersistStream или IPersistStreamInit (эти два являются взаимоисключающими и не должны быть реализованы вместе по большей части). Последний используется, когда элемент управления хочет узнать, когда он создается, а не перезагружен из существующего постоянного состояния (IPersistStream не имеет созданной возможности). Существование любого интерфейса указывает, что элемент управления может сохранять и загружать его постоянное состояние в поток, то есть экземпляр IStream.

Помимо этих двух потоковых интерфейсов интерфейсы IPersist*, перечисленные в следующей таблице, могут быть предоставлены при необходимости для поддержки сохраняемости в расположениях, отличных от расширяемого IStream.

Набор категорий компонентов определяется для покрытия поддержки интерфейсов сохраняемостью в разделе "Категории компонентов".

Интерфейс Использование
IPersistMemory
Объект может сохранить и загрузить его состояние в последовательный массив байтов фиксированной длины (в памяти).
IPersistStorage
Объект может сохранить и загрузить его состояние в экземпляр IStorage . Элементы управления, которые должны быть помечены как другие составные объекты документа (для вставки в контейнеры, не поддерживающие управление), должны поддерживать этот интерфейс.
IPersistPropertyBag
Объект может сохранить и загрузить его состояние в виде отдельных свойств, записанных в IPropertyBag, который реализует контейнер. Он используется для функции "Сохранить как текст" в некоторых контейнерах.
IPersistMoniker
Объект может сохранить и загрузить его состояние в расположение, именованное моникером. Элемент управления вызывает IMoniker::BindToStorage для получения необходимого интерфейса хранения, например IStorage, IStream, ILockBytes, IDataObject и т. д.

Хотя поддержка IPersistPropertyBag является необязательной, настоятельно рекомендуется в качестве оптимизации для контейнеров с функциями сохранения текста, такими как Visual Basic.

За исключением IPersistStream::GetSizeMax, IPersistStreamInit::GetSizeMax и IPersistMemory::GetSizeMax все методы каждого интерфейса должны быть полностью реализованы.

Элементы управления