| Предыдущий | Следующий |
| TAPI_E_CONFERENCEFULL | TAPI_E_DIALMODIFIERNOTSUPPORTED |
OLE_E_CANT_BINDTOSOURCE
OLE link не может привязаться к источнику
это HRESULT 2147745802 (0x8004000A) из winerror.h. AllStat описывает его как «Не удаётся привязаться к источнику». Результат относится к binding через IOleLink или активации связанного содержимого через moniker. Эта константа полезен только вместе с методом и фазой жизненного цикла, где сохранённый moniker не может разрешиться и привязаться к пригодному объекту-источнику.
Решающее значение OLE_E_CANT_BINDTOSOURCE состоит в том, что сохранённый moniker не может разрешиться и привязаться к пригодному объекту-источнику. для этого результата, бит severity сам по себе не определяет обработку; решающий факт — сохранённый moniker не разрешается и не привязывается к пригодному объекту-источнику. Надёжная диагностика этого результата сохраняет исходное значение и восстанавливает состояние, при котором это стало истинно.
Где появляется результат
- Этот 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, поставщика и базовый ресурс, проверяя невозможность разрешить сохранённый moniker и получить пригодный объект-источник.
Типичные причины и граница интерпретации
Непосредственная граница контракта конкретна: сохранённый moniker не может разрешиться и привязаться к пригодному объекту-источнику. Типичные ветви причин:
- Источник перемещён или недоступен.
- Учётные данные или сетевой доступ блокируют binding.
- Приложение-источник или его класс недоступны.
Подтвердите ветвь причины, объясняющую невозможность binding по сохранённому moniker, используя аргументы вызова, состояние объекта, метаданные, сведения об устройстве или трассировки поставщика.
Данные и телеметрия
- Запишите этот HRESULT, 0x8004000A, имя native-метода, ID процесса и потока, ID операции, сборку компонента, архитектуру и затраченное время.
- Сохраните поколение объекта, идентичность link или storage, состояние активации, cookie advise, срок жизни окна и формат представления.
- Сохраните IErrorInfo, расширенный статус поставщика, событие storage или устройства и первый нижележащий сбой, предшествовавший этому HRESULT.
- Записывайте временные метки и ID операций для этого результата, чтобы callbacks можно было расположить по времени относительно неудачного IOleLink binding или moniker-активации связанного содержимого.
- При обработке этого HRESULT, выполняйте unadvise только для активных cookies, освобождайте интерфейсы сервера и site в документированном порядке и сохраняйте storage, если пользователь отменил действие или состояние результата неясно.
Телеметрия для этого результата должна сохранять структурные факты, доказывающие невозможность разрешить сохранённый moniker и привязаться к пригодному источнику, исключая содержимое, учётные данные, байты firmware, ключи CSS и персональные данные.
Последовательность диагностики
- Зафиксируйте этот HRESULT на native-границе до того, как framework преобразует его в общее исключение.
- Определите точное поколение объекта и метод среди IOleObject, IOleLink, IOleCache, IAdviseSink, IPersistStorage, IOleInPlaceObject, moniker, verb и callbacks client site.
- Докажите решающее условие: сохранённый moniker не разрешается и не привязывается к пригодному объекту-источнику.
- Проверяйте вероятные причины независимо: источник перемещён или недоступен; учётные данные или сеть блокируют binding; приложение-источник или класс недоступны.
- Перед очисткой после этого результата, классифицируйте каждый выходной результат как действительный, неизменённый, частичный или с переданным владением.
- Для этого результата, меняйте по одному кандидату причины — местоположение/доступность источника, сетевой доступ/учётные данные или доступность приложения/класса — и воспроизводите на минимальном стенде.
Правильная обработка и восстановление
Для этого результата, основное восстановление — восстановить доступ к исходному ресурсу или, с согласия пользователя, обновить link на подтверждённый новый источник. Отчёт о OLE_E_CANT_BINDTOSOURCE должен показывать достаточно состояния IOleLink binding или moniker-активации связанного содержимого, чтобы понять, почему сохранённый moniker не разрешается и не связывается с пригодным источником без отладчика в production.
Компонент, ответственный за этот результат, должен определить идемпотентность, отмену, лимит попыток и согласование для неудачного IOleLink binding или moniker-активации. Перед повтором OLE_E_CANT_BINDTOSOURCE.
Практический сценарий
Связанный объект указывает на сетевой документ, который был перемещён; контейнер проверяет новый путь с пользователем и обновляет link один раз. Зафиксируйте решающее состояние для этого результата и проверьте восстановление на новом поколении объекта или запроса.
Отличие от связанных HRESULT
Коды MK_E_* могут указывать на нижележащую ошибку moniker; результат уровня OLE link. Тесты и телеметрия должны сохранять эту границу для этого результата.
Рекомендации разработчикам и администраторам
Разработчикам, обрабатывающим OLE_E_CANT_BINDTOSOURCE следует явно управлять временем жизни объекта и переходами состояния, сохранять native HRESULT и обеспечивать безопасную очистку при частичной инициализации или частичных выходных данных. Создайте небольшой стенд container/server, покрывающий состояния loaded, running, in-place active, UI-active, static, linked и shutdown.
Для этого результата широкие изменения разрешений или совместимости неуместны, если данные о невозможности разрешить moniker и выполнить binding не указывают на этот слой. Исправление для этого результата должно затрагивать только компонент, поставщика, документ, устройство или конфигурацию, на которые указывают собранные данные.
Ссылки
- Microsoft: общие коды ошибок COM и OLE — официальная документация Microsoft, относящаяся к этому HRESULT.
- Microsoft: IOleObject — официальная документация Microsoft, относящаяся к этому HRESULT.
- Microsoft: интерфейсы OLE и передачи данных — официальная документация Microsoft, относящаяся к этому HRESULT.
- Microsoft: кэширование представлений OLE — официальная документация Microsoft, относящаяся к этому HRESULT.
Нужно найти другой код? Найти другой код состояния или ошибки.