裝置錯誤碼
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 | 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 |
相關資訊
裝置錯誤碼是在 「UPnP 裝置架構 1.0 版」中指定。 本主題中提及的常數定義于 Upnp.h 和 Upnp.idl 檔案中。