Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Методы InvokeAction и QueryStateVariable возвращают значения HRESULT, которые могут указывать на ошибку устройства (то есть ошибку, полученную с устройства, сертифицированного UPnP). Если ошибка получена от устройства, метод (InvokeAction или QueryStateVariable) возвращает значение HRESULT, основанное на коде ошибки устройства, как описано в этом разделе. Так как преобразование применяется к коду ошибки устройства для создания значения HRESULT, вы не можете считывать код ошибки устройства непосредственно из значения HRESULT.
Преобразование кода ошибки устройства в код HRESULT
Существуют как стандартные, так и не стандартные коды ошибок устройства. Стандартные коды имеют одинаковое значение для всех устройств, сертифицированных UPnP, и имеют значения менее 600. Коды, не являющиеся стандартными, относятся к поставщику и имеют значения от 600 до 899.
Указывает, является ли код ошибки устройства стандартным, определяет, как создается значение HRESULT:
- Стандартный код ошибки устройства сопоставляется со значением HRESULT.
- Код ошибки нестандартного устройства внедрен в значение HRESULT путем применения формулы.
Обе эти процедуры можно отменить, чтобы определить код ошибки устройства из определенного значения HRESULT.
Получение кода ошибки устройства из значения HRESULT
Если значение HRESULT больше или равно UPNP_E_ACTION_SPECIFIC_BASE (0x80040300) и меньше или равно UPNP_E_ACTION_SPECIFIC_MAX (0x8004042B), код ошибки устройства нестандартен — используйте формулу в следующем разделе, чтобы определить код ошибки. В противном случае код ошибки устройства является стандартным— используйте таблицу в разделе "Сопоставление стандартных кодов ошибок устройства", который предоставляет сопоставление из значения HRESULT с кодом ошибки устройства.
Для текстового описания ошибки после вызова IUPnPService::InvokeActionзадайте параметру pvarRetVal пустой массив. По возвращении этот параметр будет содержать текстовое описание ошибки, если произошло какое-либо.
Формула для кодов ошибок нестандартного устройства
Используйте следующую формулу, если UPNP_E_ACTION_SPECIFIC_BASE ≤ HRESULT ≤UPNP_E_ACTION_SPECIFIC_MAX.
Код ошибки устройства = (HRESULT - UPNP_E_ACTION_SPECIFIC_BASE) + FAULT_ACTION_SPECIFIC_BASE
Подставляя фактические числовые значения, уравнение равно: Код ошибки устройства = (HRESULT - 0x80040300) + 0x0258
Сопоставление стандартных кодов ошибок устройств
Используйте следующее сопоставление, если HRESULT<UPNP_E_ACTION_SPECIFIC_BASE.
| Значение HRESULT | Код ошибки устройства | Фактическое значение |
|---|---|---|
| UPNP_E_INVALID_ACTION (недопустимое действие) | ОШИБКА_НЕДОПУСТИМОЕ_ДЕЙСТВИЕ | 401 |
| UPNP_E_INVALID_ARGUMENTS (НЕВЕРНЫЕ_АРГУМЕНТЫ) | ОШИБКА_НЕДОПУСТИМЫЙ_АРГУМЕНТ | 402 |
| UPNP_E_ВНЕ СИНХРОНИЗАЦИИ | ОШИБКА_НЕДОПУСТИМЫЙ_НОМЕР_ПОСЛЕДОВАТЕЛЬНОСТИ | 403 |
| UPNP_E_INVALID_VARIABLE (недопустимая переменная) | FAULT_INVALID_VARIABLE | 404 |
| UPNP_E_ОШИБКА_ЗАПРОС_ДЕЙСТВИЯ_НЕ_УДАЛСЯ | ВНУТРЕННЯЯ ОШИБКА УСТРОЙСТВА | 501 |
Дополнительные сведения
Коды ошибок устройства указаны в разделе "Архитектура устройства UPnP версии 1.0". Константы, упомянутые в этом разделе, определяются в файлах Upnp.h и Upnp.idl.