| Предыдущий | Следующий |
| TAPI_E_OPERATIONFAILED | TAPI_E_ALLOCATED |
OLE_E_NOCACHE
У OLE object отсутствует presentation cache, необходимый для операции
это HRESULT 2147745798 (0x80040006) из winerror.h. AllStat описывает его как «Нет кэша, над которым можно выполнить операцию». Результат относится к IOleCache, IViewObject или обработке presentation в контейнере. Для этого результата важно установить не просто факт сбоя, а какой объект и переход состояния подтвердили отсутствие требуемой записи или объекта cache.
Решающее значение OLE_E_NOCACHE состоит в том, что объект не содержит запись cache или cache object, необходимый запросу. для этого результата, бит severity сам по себе не определяет обработку; решающий факт — в объекте отсутствует требуемая запись/объект cache. Интерпретируйте этот HRESULT на native-границе до того, как wrapper скроет это состояние.
Где появляется результат
- Этот HRESULT может возникать в контейнерах compound document, встроенных и связанных объектах, при OLE-активации, advising, кэшировании, преобразовании и сохранении.
- Привяжите сбой к одной конкретной операции среди IOleObject, IOleLink, IOleCache, IAdviseSink, IPersistStorage, IOleInPlaceObject, moniker, verb и callback client site.
- Сохраните CLSID, идентичность объекта и client site, storage или moniker, cookie advise, verb, состояние активации, поколение окна и формат представления до освобождения или замены объекта, вернувшего этот HRESULT.
Запись об инциденте для этого результата должна различать вызывающий код, runtime, поставщика и базовый ресурс, проверяя отсутствие требуемой записи или объекта cache.
Типичные причины и граница интерпретации
Непосредственная граница контракта конкретна: объект не содержит запись cache или cache object, необходимый запросу. Типичные ветви причин:
- Запрошенный FORMATETC никогда не кэшировался.
- Инициализация cache была пропущена.
- Cache был отброшен при преобразовании или повторной загрузке.
Подтвердите ветвь причины отсутствия требуемого cache по аргументам вызова, состоянию объекта, метаданным, сведениям об устройстве или трассировкам поставщика.
Данные и телеметрия
- Запишите этот HRESULT, 0x80040006, имя native-метода, ID процесса и потока, ID операции, сборку компонента, архитектуру и затраченное время.
- Сохраните поколение объекта, идентичность link или storage, состояние активации, cookie advise, срок жизни окна и формат представления.
- Сохраните IErrorInfo, расширенный статус поставщика, событие storage или устройства и первый нижележащий сбой, предшествовавший этому HRESULT.
- Сопоставьте этот результат с идентичностью процесса и потока, версиями компонентов, архитектурой и пакетом, которому принадлежит обработка IOleCache, IViewObject или presentation контейнера.
- При обработке этого HRESULT, выполняйте unadvise только для активных cookies, освобождайте интерфейсы сервера и site в документированном порядке и сохраняйте storage, если пользователь отменил действие или состояние результата неясно.
Телеметрия для этого результата должна сохранять структурные факты, доказывающие отсутствие требуемой записи или объекта cache, исключая содержимое, учётные данные, байты firmware, ключи CSS и персональные данные.
Последовательность диагностики
- Зафиксируйте этот HRESULT на native-границе до того, как framework преобразует его в общее исключение.
- Определите точное поколение объекта и метод среди IOleObject, IOleLink, IOleCache, IAdviseSink, IPersistStorage, IOleInPlaceObject, moniker, verb и callbacks client site.
- Докажите решающее условие: объект не содержит запись cache или cache object, необходимый запросу.
- Проверяйте вероятные причины независимо: FORMATETC никогда не кэшировался; инициализация cache пропущена; cache был отброшен при преобразовании или reload.
- Перед очисткой после этого результата, классифицируйте каждый выходной результат как действительный, неизменённый, частичный или с переданным владением.
- Для этого результата, меняйте по одному кандидату причины — наличие FORMATETC, инициализацию cache или его сохранение при conversion/reload — и воспроизводите на минимальном стенде.
Правильная обработка и восстановление
Для этого результата, основное восстановление — создать требуемую запись cache либо получить живое presentation от работающего сервера и сохранить его, если нужен offline-показ. Отчёт о OLE_E_NOCACHE должен показывать достаточно состояния IOleCache, IViewObject или presentation контейнера, чтобы понять отсутствие требуемого cache без отладчика в production.
Повторяйте операцию только если данные показывают, что состояние отсутствующего cache может измениться и операция допускает повтор. Перед повтором OLE_E_NOCACHE.
Практический сценарий
Документ пытается отрисовать встроенный объект при недоступном сервере, но при сохранении не было закэшировано metafile-presentation. Зафиксируйте решающее состояние для этого результата и проверьте восстановление на новом поколении объекта или запроса.
Отличие от связанных HRESULT
CACHE_E_NOCACHE_UPDATED относится к невозможности обновить записи cache; этот HRESULT означает, что самого cache для операции нет. Тесты и телеметрия должны сохранять это различие для этого результата.
Рекомендации разработчикам и администраторам
Разработчикам, обрабатывающим OLE_E_NOCACHE следует явно управлять временем жизни объекта и переходами состояния, сохранять native HRESULT и обеспечивать безопасную очистку при частичной инициализации или частичных выходных данных. Создайте небольшой стенд container/server, покрывающий состояния loaded, running, in-place active, UI-active, static, linked и shutdown.
Для этого результата администраторы должны восстанавливать версионированным комплектом компонент, которому принадлежит IOleCache/IViewObject или presentation контейнера, а не копировать случайные DLL. Исправление для этого результата должно затрагивать только компонент, поставщика, документ, устройство или конфигурацию, на которые указывают собранные данные.
Ссылки
- Microsoft: общие коды ошибок COM и OLE — официальная документация Microsoft, относящаяся к этому HRESULT.
- Microsoft: IOleObject — официальная документация Microsoft, относящаяся к этому HRESULT.
- Microsoft: интерфейсы OLE и передачи данных — официальная документация Microsoft, относящаяся к этому HRESULT.
- Microsoft: кэширование представлений OLE — официальная документация Microsoft, относящаяся к этому HRESULT.
Нужно найти другой код? Найти другой код состояния или ошибки.
