| Предыдущий | Следующий |
| CACHE_E_NOCACHE_UPDATED | OLEOBJ_E_INVALIDVERB |
OLEOBJ_E_NOVERBS
У OLE-объекта нет доступных verbs
OLEOBJ_E_NOVERBS имеет шестнадцатеричное значение 0x80040180 (беззнаковое 2147746176, знаковое -2147221120). AllStat описывает его как «у OLE-объекта нет verbs». Узкий смысл: OLE-объект не предоставляет команд, доступных контейнеру. Сбойный этап — перечисление команд или выбор действия активации по умолчанию для встроенного объекта.
Старший бит 0x80040180 установлен, поэтому это ошибка, а не успешный или информационный результат. Поле facility равно 4 (FACILITY_ITF), а младший 16-битный код равен 384 (0x0180). Эти битовые поля классифицируют значение, но сами по себе не определяют сбойный объект; по-прежнему необходимы нативный метод, идентичность объекта и первый источник OLEOBJ_E_NOVERBS .
Этап API
Чтобы правильно понять OLEOBJ_E_NOVERBS , нужен контекст подсистемы: OLE verbs — команды, которые сам объект объявляет доступными. Для OLEOBJ_E_NOVERBSконтейнер должен строить интерфейс по текущему перечислению и состоянию объекта, а не предполагать, что стандартно выглядящие команды существуют у каждого встроенного класса.
- Связывайте
OLEOBJ_E_NOVERBSс одной конкретной операцией в IOleObject::EnumVerbs, IOleObject::DoVerb, меню контейнера, состоянии объекта и доступности verb. - Убедитесь, что
OLEOBJ_E_NOVERBSвернулся из перечисления команд или выбора действия активации по умолчанию для встроенного объекта, а не из последующей очистки или обёртки. - Сохраните IErrorInfo, нижележащий Win32-результат, сообщение поставщика или сбой обратного вызова, предшествовавший
OLEOBJ_E_NOVERBS; HRESULT не должен стирать более конкретную причину.
Шаги проверки
- Зафиксируйте
OLEOBJ_E_NOVERBSна первом нативном возврате до преобразования обёрткой в общее исключение. - Определите точный объект, метод и фазу жизненного цикла, связанные с перечислением команд или выбором действия активации по умолчанию для встроенного объекта.
- Вызовите EnumVerbs и сохраните его точный результат.
- Зафиксируйте CLSID объекта, версию сервера и признак доступности кэшированных данных для отображения.
- Не выводите набор verbs из другой версии или файловых ассоциаций.
- Воспроизведите
OLEOBJ_E_NOVERBSс одним контролируемым изменением входа или состояния и убедитесь, что исправление меняет решающие диагностические данные, а не только скрывает результат.
Границы интерпретации
OLEOBJ_E_NOVERBSможет возникнуть, если объект предназначен только для данных и намеренно не имеет интерактивных verbs.OLEOBJ_E_NOVERBSможет возникнуть, если регистрация или реализация сервера не содержит определений verbs.OLEOBJ_E_NOVERBSможет возникнуть, если контейнер предполагает, что каждый встроенный класс поддерживает open, show, edit или primary activation.
Запись инцидента
Для полезного расследования OLEOBJ_E_NOVERBS зафиксируйте ID verb, перечисленные OLEVERB, CLSID объекта, состояние активации, client site, родительский HWND, указатель MSG, прямоугольник и ответ сервера. Для OLEOBJ_E_NOVERBSтакже сохраните версии приложения и компонента, архитектуру, ID процесса и потока, COM apartment, идентификатор корреляции операции, длительность и первое событие, изменившее состояние до сбоя. При журналировании OLEOBJ_E_NOVERBSскрывайте содержимое и учётные данные, сохраняя типы, длины, хэши, непрозрачные идентификаторы и поколения жизненного цикла, необходимые для воспроизведения контракта.
- Для
OLEOBJ_E_NOVERBS, вызовите EnumVerbs и сохраните его точный результат. - Для
OLEOBJ_E_NOVERBS, зафиксируйте CLSID объекта, версию сервера и признак доступности кэшированных данных для отображения. - Для
OLEOBJ_E_NOVERBS, не выводите набор verbs из другой версии или файловых ассоциаций.
Условия восстановления
Исправление. Для OLEOBJ_E_NOVERBS, показывайте объект как неинтерактивный, используйте команду, специфичную для класса, либо исправляйте сервер только если его контракт требует verbs. Граница повтора. Повторяйте только после замены объекта или исправления сервера; повторное перечисление того же неизменённого объекта не создаст verbs. Перед повтором OLEOBJ_E_NOVERBS восстановите меню контейнера и состояние active object, закройте частично активированный интерфейс и заново перечислите verbs после изменения объекта или сервера.
Практический сценарий
Отчёт содержит статический объект данных с корректным представлением, но без редактора; контейнер отображает его и отключает команду Edit. Это локализует OLEOBJ_E_NOVERBS в области OLE verbs и активации встроенных объектов и даёт регрессионный тест для указанного исправления.
Отличие от связанных HRESULT
OLEOBJ_E_INVALIDVERB означает, что verbs существуют, но выбранный недопустим; OLEOBJ_E_NOVERBS означает отсутствие доступных verbs. Для OLEOBJ_E_NOVERBSсохраняйте эти исходы раздельно в сопоставлении исключений, измерениях телеметрии, сообщениях пользователю и автоматической политике повторов.
Рекомендации разработчикам и администраторам
Для OLEOBJ_E_NOVERBS, стройте команды по текущему перечислению OLEVERB, сохраняйте знаковые идентификаторы verb и передавайте в DoVerb правильные client site, родительское окно, сообщение и прямоугольник. Регрессионные проверки для OLEOBJ_E_NOVERBS должны включать объекты без verbs, отрицательные стандартные verbs, private verbs, доступность в зависимости от состояния, headless-активацию, перезапуск сервера и деактивацию UI после сбоя.
Эксплуатационное исправление для OLEOBJ_E_NOVERBS должно быть направлено на владельца, подтверждённого данными: прежде чем исправлять регистрацию, убедитесь, что ожидаемый object server установлен и тот же CLSID предоставляет verb в другом поддерживаемом контейнере. Сохраните трассировки до и после для OLEOBJ_E_NOVERBS , чтобы изменение можно было объяснить и откатить.
Ссылки
- Microsoft: общие коды ошибок COM — официальная документация Microsoft, относящаяся к
OLEOBJ_E_NOVERBS. - Microsoft: значения HRESULT — официальная документация Microsoft, относящаяся к
OLEOBJ_E_NOVERBS. - Microsoft: IOleObject::EnumVerbs — официальная документация Microsoft, относящаяся к
OLEOBJ_E_NOVERBS. - Microsoft: IOleObject::DoVerb — официальная документация Microsoft, относящаяся к
OLEOBJ_E_NOVERBS. - Microsoft: структура OLEVERB — официальная документация Microsoft, относящаяся к
OLEOBJ_E_NOVERBS.
Нужно найти другой код? Найти другой код состояния или ошибки.