Codici di errore del dispositivo
I metodi InvokeAction e QueryStateVariable restituiscono valori HRESULT che potrebbero indicare un errore del dispositivo, ovvero un errore ricevuto da un dispositivo certificato UPnP. Se viene ricevuto un errore da un dispositivo, il metodo (InvokeAction o QueryStateVariable) restituisce un valore HRESULT basato sul codice di errore del dispositivo, come illustrato in questo argomento. Poiché una conversione viene applicata al codice di errore del dispositivo per produrre un valore HRESULT , non è possibile leggere il codice di errore del dispositivo direttamente dal valore HRESULT .
Conversione di un codice di errore del dispositivo in hresult
Sono disponibili sia codici di errore standard che non standard del dispositivo. I codici standard hanno lo stesso significato in tutti i dispositivi certificati UPnP e hanno valori inferiori a 600. I codici non standard sono specifici del fornitore e hanno valori compresi tra 600 e 899.
Indica se il codice di errore del dispositivo è standard determina la modalità di generazione del valore HRESULT :
- Viene eseguito il mapping di un codice di errore del dispositivo standard a un valore HRESULT .
- Un codice di errore del dispositivo non standard viene incorporato nel valore HRESULT applicando una formula.
Entrambe queste procedure possono essere invertite per determinare il codice di errore del dispositivo da un valore HRESULT specifico.
Derivazione di un codice di errore del dispositivo da un valore HRESULT
Se il valore HRESULT è maggiore o uguale a UPNP_E_ACTION_SPECIFIC_BASE (0x80040300) e minore o uguale a UPNP_E_ACTION_SPECIFIC_MAX (0x8004042B), il codice di errore del dispositivo non è standard; usare la formula nella sezione seguente per determinare il codice di errore. In caso contrario, il codice di errore del dispositivo è standard: usare la tabella nella sezione Mapping per i codici di errore del dispositivo standard, che fornisce il mapping dal valore HRESULT al codice di errore del dispositivo.
Per una descrizione testuale dell'errore dopo una chiamata a IUPnPService::InvokeAction, impostare il parametro pvarRetVal su una matrice vuota. Al termine, questo parametro conterrà una descrizione testuale dell'errore, se presente.
Formula per i codici di errore del dispositivo non standard
Utilizzare la formula seguente se UPNP_E_ACTION_SPECIFIC_BASE ≤ ≤ HRESULTUPNP_E_ACTION_SPECIFIC_MAX.
Codice errore dispositivo = (HRESULT - UPNP_E_ACTION_SPECIFIC_BASE) + FAULT_ACTION_SPECIFIC_BASE
Sostituendo i valori numerici effettivi, l'equazione è: Codice errore dispositivo = (HRESULT - 0x80040300) + 0x0258
Mapping per i codici di errore del dispositivo standard
Usare il mapping seguente se HRESULT<UPNP_E_ACTION_SPECIFIC_BASE.
Valore HRESULT | Codice errore dispositivo | Valore effettivo |
---|---|---|
UPNP_E_INVALID_ACTION | FAULT_INVALID_ACTION | 401 |
UPNP_E_INVALID_ARGUMENTS | FAULT_INVALID_ARG | 402 |
UPNP_E_OUT_OF_SYNC | FAULT_INVALID_SEQUENCE_NUMBER | 403 |
UPNP_E_INVALID_VARIABLE | FAULT_INVALID_VARIABLE | 404 |
UPNP_E_ACTION_REQUEST_FAILED | FAULT_DEVICE_INTERNAL_ERROR | 501 |
Altre informazioni
I codici di errore del dispositivo vengono specificati in "UPnP Device Architecture versione 1.0". Le costanti indicate in questo argomento sono definite nei file Upnp.h e Upnp.idl.