Интерфейсы сохраняемости
Объекты, имеющие постоянное состояние любого вида, должны реализовать по крайней мере один интерфейс IPersist* и предпочтительно несколько интерфейсов, чтобы предоставить контейнеру наиболее гибкий выбор способа сохранения состояния элемента управления.
Если элемент управления имеет любое постоянное состояние, оно должно, как минимум, реализовать IPersistStream или IPersistStreamInit (эти два являются взаимоисключающими и не должны быть реализованы вместе для большей части). Последний используется, когда элемент управления хочет знать, когда он создается, в отличие от перезагрузки из существующего постоянного состояния (IPersistStream не имеет созданной возможности). Существование любого интерфейса указывает, что элемент управления может сохранять и загружать его постоянное состояние в поток, то есть экземпляр IStream.
Помимо этих двух потоковых интерфейсов интерфейсы IPersist* , перечисленные в следующей таблице, могут быть предоставлены при необходимости для поддержки сохраняемости в расположениях, отличных от расширяемого IStream.
Набор категорий компонентов определяется, чтобы охватывать поддержку интерфейсов сохраняния, см. раздел "Категории компонентов".
Интерфейс | Использование |
---|---|
IPersistMemory |
Объект может сохранить и загрузить его состояние в последовательный массив байтов фиксированной длины (в памяти). |
IPersist служба хранилища |
Объект может сохранить и загрузить его состояние в экземпляр I служба хранилища. Элементы управления, которые должны быть помечены insertable как другие составные объекты документа (для вставки в контейнеры с поддержкой неконтролируемых элементов) должны поддерживать этот интерфейс. |
IPersistPropertyBag |
Объект может сохранить и загрузить его состояние в виде отдельных свойств, записанных в IPropertyBag, который реализует контейнер. Эта функция используется для функции "Сохранить как текст" в некоторых контейнерах. |
IPersistMoniker |
Объект может сохранить и загрузить его состояние в расположение с именем моникера. Элемент управления вызывает IMoniker::BindTo служба хранилища для получения необходимого интерфейса хранения, например I служба хранилища, IStream, ILockBytes, IDataObject и т. д. |
Хотя поддержка IPersistPropertyBag является необязательной, настоятельно рекомендуется в качестве оптимизации для контейнеров с помощью функций "Сохранить как текст", таких как Visual Basic.
За исключением IPersistStream::GetSizeMax, IPersistStreamInit::GetSizeMax и IPersistMemory::GetSizeMax все методы каждого интерфейса должны быть полностью реализованы.