Поделиться через


Метод IUPnPService::InvokeAction (upnp.h)

Метод InvokeAction вызывает метод на устройстве.

Синтаксис

HRESULT InvokeAction(
  [in]      BSTR    bstrActionName,
  [in]      VARIANT vInActionArgs,
  [in, out] VARIANT *pvOutActionArgs,
  [in, out] VARIANT *pvRetVal
);

Параметры

[in] bstrActionName

Указывает вызываемый метод.

[in] vInActionArgs

Задает массив входных аргументов для метода . Если у действия нет входных аргументов, этот параметр должен содержать пустой массив.

Содержимое этого массива зависит от службы.

[in, out] pvOutActionArgs

Во входных данных содержит ссылку на пустой массив. В выходных данных получает ссылку на массив выходных аргументов. Если действие не содержит выходных аргументов, этот параметр содержит пустой массив.

Содержимое этого параметра зависит от службы.

Освободите этот параметр с помощью VariantClear.

[in, out] pvRetVal

Во входных данных содержит ссылку на пустой массив. В выходных данных получает ссылку на VARIANT , содержащую возвращаемое значение этого действия.

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

Освободите этот параметр с помощью VariantClear.

Возвращаемое значение

Если метод выполнен успешно, возвращаемое значение будет S_OK. В противном случае метод возвращает один из кодов com-ошибок, определенных в WinError.h, или одно из возвращаемых значений UPnP, показанных в следующей таблице. Некоторые из этих значений указывают на то, что с устройства, сертифицированного UPnP, была получена ошибка. Дополнительные сведения см. в разделе Коды ошибок устройства.

Код возврата Описание
UPNP_E_ACTION_REQUEST_FAILED
На устройстве возникла внутренняя ошибка; не удалось выполнить запрос.
UPNP_E_DEVICE_ERROR
Произошла неизвестная ошибка.
UPNP_E_DEVICE_TIMEOUT
Устройство не ответило в течение 30-секундного периода ожидания.
UPNP_E_ERROR_PROCESSING_RESPONSE
Устройство отправило ответ, который не может быть обработан; Например, ответ поврежден.
UPNP_E_INVALID_ACTION
Это действие не поддерживается устройством.
UPNP_E_INVALID_ARGUMENTS
Один или несколько аргументов, переданных в vInActionArgs , являются недопустимыми.
UPNP_E_PROTOCOL_ERROR
Произошла ошибка на уровне протокола управления UPnP.
UPNP_E_TRANSPORT_ERROR
Произошла ошибка HTTP. Используйте свойство IUPnPService::LastTransportStatus , чтобы получить фактический код состояния HTTP.
Примечание Этот код ошибки также возвращается, если ответ SOAP превышает 100 килобайт.
 

Комментарии

Когда приложение вызывает метод InvokeAction, оно включает список аргументов, которые должны соответствовать аргументам, ожидаемым службой. Контрольная точка сопоставляет эти аргументы VARIANT с требуемым типом. В следующей таблице показаны используемые сопоставления.

Тип данных Тип, возвращаемый MSXML
SDT_STRING = 0 VT_BSTR
SDT_NUMBER VT_BSTR
SDT_INT VT_I4
SDT_FIXED_14_4 VT_CY
SDT_BOOLEAN VT_BOOL
SDT_DATETIME_ISO8601 VT_DATE
SDT_DATETIME_ISO8601TZ VT_DATE
SDT_DATE_ISO8601 VT_DATE
SDT_TIME_ISO8601 VT_DATE
SDT_TIME_ISO8601TZ VT_DATE
SDT_I1 VT_I1
SDT_I2 VT_I2
SDT_I4 VT_I4
SDT_UI1 VT_UI1
SDT_UI2 VT_UI2
SDT_UI4 VT_UI4
SDT_R4 VT_FLOAT
SDT_R8 VT_DOUBLE
SDT_FLOAT VT_DOUBLE
SDT_UUID VT_BSTR
SDT_BIN_BASE64 VT_ARRAY
SDT_BIN_HEX VT_ARRAY
SDT_CHAR VT_UI2 (wchar)
SDT_URI VT_BSTR
 
Примечание При вызове метода параметры, получающие значения, не должны передаваться значение NULL .
 
Примечание Значение с плавающей запятой, отправленное устройством в качестве аргумента [out] или возвращаемое значение, будет изменено при получении контрольной точкой. Например, рассмотрим устройство с Action1Out_float действия, возвращающего один аргумент с плавающей запятой [out]. Когда контрольная точка вызывает это действие, устройство возвращает значение -234,567; однако контрольная точка фактически получает значение -234,567001342773 вместо ожидаемого значения -234,567.

Чтобы обойти эту проблему, используйте r4 вместо float в качестве типа данных UPnP для не целочисленных числовых значений.

 

Требования

Требование Значение
Минимальная версия клиента Windows XP [только классические приложения]
Минимальная версия сервера Ни одна версия не поддерживается
Целевая платформа Windows
Header upnp.h
DLL Upnp.dll

См. также раздел

IUPnPService