Метод IPropertyStorage::Commit (propidl.h)

Метод IPropertyStorage::Commit сохраняет изменения, внесенные в объект хранилища свойств, в родительский объект хранилища.

Синтаксис

HRESULT Commit(
  [in] DWORD grfCommitFlags
);

Параметры

[in] grfCommitFlags

Флаги, указывающие условия, при которых должна выполняться фиксация. Дополнительные сведения о конкретных флагах и их значении см. в разделе Примечания.

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

Этот метод поддерживает стандартное возвращаемое значение E_UNEXPECTED, а также следующее:

Комментарии

Как и IStorage::Commit, метод IPropertyStorage::Commit гарантирует, что все изменения, внесенные в объект хранилища свойств, отражаются в родительском хранилище.

В прямом режиме в реализации составного файла вызов этого метода приводит к тому, что все изменения в буферах памяти в текущий момент сбрасываются в поток базовых свойств. В реализации составного файла для неимплированных наборов свойств IStorage::Commit также вызывается в базовом объекте подсранилище с переданным параметром grfCommitFlags .

В режиме транзакций этот метод приводит к тому, что изменения постоянно отражаются в постоянном изображении объекта хранилища. Зафиксированные изменения должны быть внесены в этот набор свойств с момента его открытия или с момента последней фиксации этого открытия набора свойств. Метод фиксации публикует изменения, внесенные на одном уровне объекта, на следующий уровень. Конечно, это зависит от любой транзакции внешнего уровня, которая может присутствовать на объекте, в котором содержится этот набор свойств. Разрешение на запись должно быть указано при открытии набора свойств (через IPropertySetStorage) в открываемом наборе свойств, чтобы операция фиксации была успешной.

Если операция фиксации по какой-либо причине завершается сбоем, состояние объекта хранилища свойств остается таким же, как и до фиксации.

Этот вызов не влияет на существующие свойства хранилища или потокового значения, открытые из этого хранилища свойств, но фиксирует их.

Допустимые значения для параметра grfCommitFlags перечислены в следующей таблице.

Значение Значение
STGC_DEFAULT Фиксации в обычной семантике транзакций. Последний писатель побеждает. Этот флаг может не указываться с другими значениями флага.
STGC_ONLYIFCURRENT Фиксирует изменения только в том случае, если текущее постоянное содержимое набора свойств является тем, на котором основаны изменения, которые будут зафиксированы. То есть не фиксирует изменения, если содержимое набора свойств было изменено фиксацией из другого открытия набора свойств. Если по этой причине фиксация не выполнена, возвращается STG_E_NOTCURRENT ошибки.
STGC_OVERWRITE Полезно только при фиксации транзакции, которая не имеет дополнительного внешнего уровня вложенности транзакций, хотя и допустима во всех случаях.
Примечание Указывает, что вызывающий объект готов к повреждению данных за счет уменьшения использования диска на целевом томе. Этот флаг потенциально полезен в сценариях нехватки места на диске, хотя его следует использовать с осторожностью.
 
 
Примечание Использование IPropertyStorage::Commit для записи свойств в файлы изображений в Windows XP не работает. Затронутые форматы файлов изображений:
  • BMP
  • DIB
  • .emf
  • .gif
  • ICO
  • JFIF
  • JPE
  • JPEG
  • .jpg
  • .png
  • .Rle
  • TIFF
  • .wmf
Из-за ошибки в обработчике свойств файла изображения в Windows XP вызов IPropertyStorage::Commit фактически отменяет все внесенные изменения, а не сохраняет их.

Обходной путь —

опустить вызов IPropertyStorage::Commit. Вызов IUnknown::Release в обработчике свойств файла изображения XP без вызова IPropertyStorage::Commit сначала неявно фиксирует изменения в файле. Обратите внимание, что вызов IUnknown::Release без первого вызова IPropertyStorage::Commit отменяет все внесенные изменения. Это решение предназначено для обработчика свойств файла изображений в Windows XP. Также обратите внимание, что в более поздних версиях Windows этот компонент работает правильно (то есть вызов IPropertyStorage::Commit сохраняет изменения, а вызов IUnknown::Release без вызова IPropertyStorage::Commit отменяет их).

 

Требования

Требование Значение
Минимальная версия клиента Windows 2000 Профессиональная [классические приложения | Приложения UWP]
Минимальная версия сервера Windows 2000 Server [классические приложения | Приложения UWP]
Целевая платформа Windows
Header propidl.h (включая Objbase.h, Propidlbase.h)
Библиотека Uuid.lib
DLL Ole32.dll

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

IPropertyStorage

IPropertyStorage::ReadMultiple

IStorage::Commit