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

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

Синтаксис

HRESULT Commit(
  [in] DWORD grfCommitFlags
);

Параметры

[in] grfCommitFlags

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

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

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

Комментарии

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

В прямом режиме в реализации составного файла вызов этого метода приводит к тому, что все изменения в буферах памяти будут очищаться в базовом потоке свойств. В реализации составного файла для наборов свойств nonsimple IStorage::Commit также вызывается в базовом объекте substorage с переданным параметром 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 (include Objbase.h, Propidlbase.h)
Библиотека Uuid.lib
DLL Ole32.dll

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

IPropertyStorage

IPropertyStorage::ReadMultiple

IStorage::Commit