Что означает код HRESULT 0x00040002 (OLE_S_MAC_CLIPFORMAT)?

 
Предыдущий Следующий
OLE_S_STATIC DRAGDROP_S_DROP

OLE_S_MAC_CLIPFORMAT

Распознан legacy-формат буфера обмена Macintosh

OLE_S_MAC_CLIPFORMAT — это HRESULT 262146 (0x00040002) из winerror.h. AllStat описывает OLE_S_MAC_CLIPFORMAT как «Формат буфера обмена Macintosh». Старший бит severity сброшен, поэтому это успешный результат, но он сообщает больше, чем обычный S_OK.

Операция передачи данных OLE завершилась успешно и определила данные как формат буфера обмена Macintosh, для которого может требоваться legacy-сопоставление форматов.

Граница состояния, которую нужно подтвердить

Главный вопрос для OLE_S_MAC_CLIPFORMAT — соответствуют ли объявленный clipboard format, порядок байтов, encoding и storage medium converter, который будет обрабатывать данные. Для OLE_S_MAC_CLIPFORMATсам HRESULT не подтверждает завершение несвязанной работы и не гарантирует качество необязательных выходных данных.

Надёжная интерпретация OLE_S_MAC_CLIPFORMAT точно указывает контракт метода, поколение объекта и выходные данные, которые остаются действительными. Для OLE_S_MAC_CLIPFORMAT, это не позволяет ошибочно считать результат «успех с дополнительной информацией» ни полным успехом, ни обычной ошибкой.

Где встречается этот результат

  • OLE_S_MAC_CLIPFORMAT может появляться при межплатформенном импорте документов; фиксируйте интерфейс и метод, вернувшие результат, а не делайте вывод только по символическому имени.
  • OLE_S_MAC_CLIPFORMAT может появляться в коде преобразования OLE clipboard; фиксируйте интерфейс и метод, вернувшие результат, а не делайте вывод только по символическому имени.
  • OLE_S_MAC_CLIPFORMAT может появляться в архивных приложениях, встречающих embedded-данные старого Macintosh-происхождения; фиксируйте интерфейс и метод, вернувшие результат, а не делайте вывод только по символическому имени.

Для OLE_S_MAC_CLIPFORMAT, одно и то же числовое успешное значение может быть обработано неверно, если обёртка оставляет только Boolean. Для OLE_S_MAC_CLIPFORMATсохраняйте исходный HRESULT до оценки выходных данных и перехода состояния, относящихся к конкретному коду.

Какие доказательства и телеметрию сохранить

  • Для OLE_S_MAC_CLIPFORMAT, сохраните идентификатор clipboard format.
  • Для OLE_S_MAC_CLIPFORMAT, сохраните поля FORMATETC и значение tymed.
  • Для OLE_S_MAC_CLIPFORMAT, сохраните метаданные исходного приложения и платформы.
  • Для OLE_S_MAC_CLIPFORMAT, сохраните исходную длину данных и хеш до преобразования.
  • Для OLE_S_MAC_CLIPFORMAT, сохраните выбранную процедуру преобразования и полученный формат.

Также зафиксируйте ole_s_mac_clipformat_operation, ole_s_mac_clipformat_object, ole_s_mac_clipformat_state_before, ole_s_mac_clipformat_state_after, время UTC, идентификаторы процесса и потока, а также correlation ID. Для OLE_S_MAC_CLIPFORMAT, не записывайте секреты в журналы, но сохраните GUID, CLSID, подтипы media, идентификаторы свойств, идентификаторы строк и хеши, необходимые для различения объектов.

Последовательность диагностики

  • Для OLE_S_MAC_CLIPFORMAT, зафиксируйте исходный HRESULT 0x00040002 сразу после возврата из метода и запишите, использовал ли вызывающий код SUCCEEDED, FAILED, проверку на точное равенство или преобразование в исключение.
  • Определите точного владельца OLE_S_MAC_CLIPFORMAT: интерфейс, метод, экземпляр объекта, версию поставщика или фильтра, поток или apartment и фазу операции.
  • Проверьте решающую границу контракта для OLE_S_MAC_CLIPFORMAT: объявленный clipboard format, порядок байтов, encoding и storage medium соответствуют converter, который будет обрабатывать данные.
  • Для OLE_S_MAC_CLIPFORMAT, проверьте каждый выходной параметр, счётчик, массив статусов, возвращённый интерфейс и побочный эффект, который документация метода связывает с этим результатом «успех с дополнительной информацией».
  • Сравните наблюдаемое состояние до и после OLE_S_MAC_CLIPFORMAT; не предполагайте, что признак успешной severity означает завершение каждой необязательной подоперации.
  • Для OLE_S_MAC_CLIPFORMAT, воспроизведите минимальный запрос с тем же состоянием объекта, а перед повтором измените только условие, подтверждённое собранными данными.

Правильная обработка, повтор и восстановление

Сохраните исходные байты и выполните преобразование, специфичное для формата. Не интерпретируйте данные как обычный Windows clipboard format только потому, что HRESULT означает успех.

Повторяйте OLE_S_MAC_CLIPFORMAT только когда зафиксированное состояние действительно может изменить документированный результат. Для OLE_S_MAC_CLIPFORMAT, повтор того же вызова неуместен для устойчивого признака конца, отмены, неподдерживаемого формата, скорректированного свойства или частичного результата, уже выполненные побочные эффекты которого ещё не согласованы.

Практический сценарий проверки

Утилита импорта читает старый compound document и встречает Macintosh clipboard presentation. Она записывает исходный формат, преобразует его в поддерживаемое Windows-представление и сравнивает результат рендеринга с исходным preview.

Негативный тест должен сохранять условие, приводящее к OLE_S_MAC_CLIPFORMAT; тест восстановления должен менять только это условие и проверять как конечное состояние, так и HRESULT.

Отличие от соседних значений HRESULT

OLE_S_STATIC относится к активности объекта; OLE_S_MAC_CLIPFORMAT — к представлению и происхождению передаваемых clipboard-данных.

Для OLE_S_MAC_CLIPFORMAT, это различие определяет, должен ли вызывающий код принять частичные результаты, завершить перечисление, подождать, изменить конфигурацию, уведомить пользователя либо вообще не выполнять восстановление после ошибки.

Рекомендации разработчикам и администраторам

Обработка кода OLE_S_MAC_CLIPFORMAT должна проверять точное документированное значение до общей ветки SUCCEEDED(hr) , если от него зависят выходные данные или управление. Операционное исправление для OLE_S_MAC_CLIPFORMAT должно затрагивать компонент-владелец COM, media, Tablet PC или OLE DB, а не сбрасывать несвязанные службы.

Отчёт в поддержку для OLE_S_MAC_CLIPFORMAT должен включать десятичное значение 262146, шестнадцатеричное 0x00040002, описание AllStat, API-владельца и первый детальный статус или выходной параметр, объясняющий, почему метод не вернул обычный S_OK.

Ссылки


Нужно найти другой код? Найти другой код состояния или ошибки.