Compartilhar via


Método IUPnPService::InvokeAction (upnp.h)

O método InvokeAction invoca um método no dispositivo.

Sintaxe

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

Parâmetros

[in] bstrActionName

Especifica o método a ser invocado.

[in] vInActionArgs

Especifica uma matriz de argumentos de entrada para o método . Se a ação não tiver argumentos de entrada, esse parâmetro deverá conter uma matriz vazia.

O conteúdo dessa matriz é específico do serviço.

[in, out] pvOutActionArgs

Na entrada, contém uma referência a uma matriz vazia. Na saída, recebe uma referência à matriz de argumentos de saída. Se a ação não tiver argumentos de saída, esse parâmetro conterá uma matriz vazia.

O conteúdo desse parâmetro é específico do serviço.

Libere esse parâmetro com VariantClear.

[in, out] pvRetVal

Na entrada, contém uma referência a uma matriz vazia. Na saída, recebe uma referência a uma VARIANT que contém o valor retornado dessa ação.

Se o dispositivo retornar um erro depois que a ação for invocada nele e esse parâmetro não estiver definido como NULL, esse parâmetro conterá um texto específico que descreve o erro após o retorno. Para obter mais informações sobre os erros retornados pelos dispositivos, consulte a documentação códigos de erro do dispositivo .

Libere esse parâmetro com VariantClear.

Retornar valor

Se o método for bem-sucedido, o valor retornado será S_OK. Caso contrário, o método retorna um dos códigos de erro COM definidos em WinError.h ou um dos valores retornados específicos do UPnP mostrados na tabela a seguir. Alguns desses valores indicam que um erro foi recebido de um dispositivo certificado por UPnP. Para obter mais informações, consulte Códigos de erro do dispositivo.

Código de retorno Descrição
UPNP_E_ACTION_REQUEST_FAILED
O dispositivo teve um erro interno; não foi possível executar a solicitação.
UPNP_E_DEVICE_ERROR
Ocorreu um erro desconhecido.
UPNP_E_DEVICE_TIMEOUT
O dispositivo não respondeu dentro do período de tempo limite de 30 segundos.
UPNP_E_ERROR_PROCESSING_RESPONSE
O dispositivo enviou uma resposta que não pode ser processada; por exemplo, a resposta foi corrompida.
UPNP_E_INVALID_ACTION
A ação não é compatível com o dispositivo.
UPNP_E_INVALID_ARGUMENTS
Um ou mais dos argumentos passados em vInActionArgs são inválidos.
UPNP_E_PROTOCOL_ERROR
Ocorreu um erro no nível do protocolo de controle UPnP.
UPNP_E_TRANSPORT_ERROR
Ocorreu um erro HTTP. Use a propriedade IUPnPService::LastTransportStatus para obter o código http status real.
Nota Esse código de erro também é retornado quando a resposta SOAP excede 100 quilobytes.
 

Comentários

Quando um aplicativo invoca o método InvokeAction, ele inclui uma lista de argumentos que devem corresponder aos argumentos esperados pelo serviço. O Ponto de Controle mapeia esses argumentos VARIANT para o tipo necessário. A tabela a seguir mostra os mapeamentos usados.

Tipo de dados Tipo retornado por 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 (um wchar)
SDT_URI VT_BSTR
 
Nota Parâmetros que recebem valores não devem ser passados um valor NULL quando o método é chamado.
 
Nota Um valor de ponto flutuante enviado por um dispositivo como um argumento [out] ou um valor retornado será alterado quando recebido pelo ponto de controle. Por exemplo, considere um dispositivo com uma ação Action1Out_float que retorna um único argumento de ponto flutuante [out]. Quando um ponto de controle invoca essa ação, o dispositivo retorna o valor -234.567; no entanto, o ponto de controle realmente recebe o valor -234,567001342773 em vez do valor esperado -234,567.

Para contornar esse problema, use r4 em vez de float como o tipo de dados UPnP para valores numéricos não inteiros.

 

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows XP [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Nenhum compatível
Plataforma de Destino Windows
Cabeçalho upnp.h
DLL Upnp.dll

Confira também

Iupnpservice