| Предыдущий | Следующий |
| STG_E_NOTCURRENT | STG_E_CANTSAVE |
STG_E_REVERTED
Почему существующие указатели COM становятся непригодными
STG_E_REVERTED — ошибка времени жизни транзакции. В транзакционном Structured Storage вызов IStorage::Revert отбрасывает изменения с момента последней фиксации. При откате родительского хранилища открытые из него дочерние хранилища и потоки становятся недействительными. Продолжение использования кэшированного дочернего интерфейса может вернуть STG_E_REVERTED; кроме освобождения, такой объект нельзя больше считать действительным представлением документа.
Это отличается от исчезновения файла с диска. Иерархия хранилища концептуально продолжает существовать, но конкретные интерфейсы вызывающей стороны принадлежат отменённой ветви транзакции.
Восстановление и архитектура
- Освободите недействительные дочерние интерфейсы и заново откройте требуемое хранилище или поток из действительного родителя.
- Явно задайте владение транзакцией: компонент, вызывающий
Revert, должен уведомить потребителей, удерживающих потомков. - Не удерживайте дочерние потоки через границы отмены интерфейса, отката или повтора без явного шага повторного получения.
- Записывайте последовательность открытия, фиксации и отката; один итоговый HRESULT не показывает, какой родитель сделал объект недействительным.
Ссылки
- Microsoft: IStorage::Revert
- Microsoft: транзакционное поведение IStorage::DestroyElement
- OpenMcdf: реализация составных файлов
Нужно найти другой код? Найти другой код состояния или ошибки.