| Предыдущий | Следующий |
| OLE_S_USEREG | OLE_S_MAC_CLIPFORMAT |
OLE_S_STATIC
Статическое OLE presentation успешно создано
это HRESULT 262145 (0x00040001) из winerror.h. AllStat описывает OLE_S_STATIC как «Успех, но объект статический». Старший бит severity сброшен, поэтому это успешный результат, но он сообщает больше, чем обычный S_OK.
Операция завершилась успешно, но полученный OLE object — статические presentation-данные, а не активный embedded object с запускаемым сервером.
Граница состояния, которую нужно подтвердить
Главный вопрос для этого результата — может ли контейнер показывать и сохранять presentation format, не предполагая наличие verbs, linking или live editing. для этого результата сам HRESULT не подтверждает завершение несвязанной работы и не гарантирует качество необязательных выходных данных.
Надёжная Интерпретация этого результата точно указывает контракт метода, поколение объекта и выходные данные, которые остаются действительными. для этого результата, это не позволяет ошибочно считать результат «успех с дополнительной информацией» ни полным успехом, ни обычной ошибкой.
Где встречается этот результат
- Этот HRESULT может появляться при создании из clipboard или содержимого data object; фиксируйте интерфейс и метод, вернувшие результат, а не делайте вывод только по символическому имени.
- Этот HRESULT может появляться при преобразовании legacy-документа; фиксируйте интерфейс и метод, вернувшие результат, а не делайте вывод только по символическому имени.
- Этот HRESULT может появляться в контейнерах, сохраняющих изображение или metafile при недоступном исходном сервере; фиксируйте интерфейс и метод, вернувшие результат, а не делайте вывод только по символическому имени.
Для этого результата, одно и то же числовое успешное значение может быть обработано неверно, если обёртка оставляет только Boolean. для этого результата сохраняйте исходный HRESULT до оценки выходных данных и перехода состояния, относящихся к конкретному коду.
Какие доказательства и телеметрию сохранить
- Сохраните CLSID или признак static format.
- Сохраните FORMATETC и storage medium.
- Сохраните размеры presentation и aspect.
- Сохраните факт регистрации server application.
- Сохраните результаты save/reload статического объекта.
Также зафиксируйте ole_s_static_operation, ole_s_static_object, ole_s_static_state_before, ole_s_static_state_after, время UTC, идентификаторы процесса и потока, а также correlation ID. для этого результата, не записывайте секреты в журналы, но сохраните GUID, CLSID, подтипы media, идентификаторы свойств, идентификаторы строк и хеши, необходимые для различения объектов.
Последовательность диагностики
- Для этого результата, зафиксируйте исходный HRESULT
0x00040001сразу после возврата из метода и запишите, использовал ли вызывающий кодSUCCEEDED,FAILED, проверку на точное равенство или преобразование в исключение. - Определите точного владельца
OLE_S_STATIC: интерфейс, метод, экземпляр объекта, версию поставщика или фильтра, поток или apartment и фазу операции. - Проверьте решающую границу контракта для этого результата: контейнер может показывать и сохранять presentation format, но не должен предполагать доступность verbs, linking или live editing.
- Проверьте каждый выходной параметр, счётчик, массив статусов, возвращённый интерфейс и побочный эффект, который документация метода связывает с этим результатом «успех с дополнительной информацией».
- Сравните наблюдаемое состояние до и после этого результата; не предполагайте, что признак успешной severity означает завершение каждой необязательной подоперации.
- Для этого результата, воспроизведите минимальный запрос с тем же состоянием объекта, а перед повтором измените только условие, подтверждённое собранными данными.
Правильная обработка, повтор и восстановление
Принимайте объект, если статического представления достаточно для действия пользователя. Отключите либо объясните edit-verbs, требующие live server, и сохраняйте presentation-данные при записи.
Повторяйте OLE_S_STATIC только когда зафиксированное состояние действительно может изменить документированный результат. для этого результата, повтор того же вызова неуместен для устойчивого признака конца, отмены, неподдерживаемого формата, скорректированного свойства или частичного результата, уже выполненные побочные эффекты которого ещё не согласованы.
Практический сценарий проверки
Документ вставляет metafile из старого источника и получает этот HRESULT. Контейнер отображает и сохраняет его, помечает как нередактируемый и проверяет, что после повторного открытия изображение осталось.
Негативный тест должен сохранять условие, приводящее к этому HRESULT; тест восстановления должен менять только это условие и проверять как конечное состояние, так и HRESULT.
Отличие от соседних значений HRESULT
OLE_S_USEREG перенаправляет поиск метаданных к регистрации; OLE_S_STATIC классифицирует созданный объект как неактивное presentation-содержимое.
Для этого результата, это различие определяет, должен ли вызывающий код принять частичные результаты, завершить перечисление, подождать, изменить конфигурацию, уведомить пользователя либо вообще не выполнять восстановление после ошибки.
Рекомендации разработчикам и администраторам
Тесты для этого результата должны проверять как закодированное условие, так и полученные выходные данные. Тест для этого результата который проверяет только SUCCEEDED не выявит устаревшие счётчики, частичные потоки, скорректированные свойства, отсутствующие callbacks и другие эффекты, специфичные для конкретного кода.
Отчёт в поддержку для этого результата должен включать десятичное значение 262145, шестнадцатеричное 0x00040001, описание AllStat, API-владельца и первый детальный статус или выходной параметр, объясняющий, почему метод не вернул обычный S_OK.
Ссылки
- Microsoft: коды ошибок COM для OLE — официальная документация, относящаяся к этому HRESULT.
- Microsoft: OleCreateStaticFromData — официальная документация, относящаяся к этому HRESULT.
- Microsoft: значения HRESULT — официальная документация, относящаяся к этому HRESULT.
Нужно найти другой код? Найти другой код состояния или ошибки.