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

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

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

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

Набор категорий компонентов определяется, чтобы охватывать поддержку интерфейсов сохраняния, см. категории компонентов.

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

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

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

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