WIA 錯誤處理常式傳回值
所有錯誤處理常式都必須遵守一些有關其傳回值的規則。
以下是所有有效的傳回值:
如果錯誤狀態碼 (強制回應對話方塊) ,這表示已採取適當的動作來更正錯誤,例如 ADF 的紙張塞紙。
如果是資訊狀態碼,這只表示已採取適當的動作來為使用者提供無強制回應對話方塊,且裝置訊息不應轉送到該行下的任何其他錯誤處理常式。
WIA_STATUS_NOT_HANDLED
未採取任何動作來處理錯誤或向使用者報告狀態。 下一個處理常式會在清單中叫用任何) 時 (。
這應該是錯誤處理常式的預設傳回值。
S_FALSE
使用者已從處理常式的無強制回應對話方塊取消傳輸。 不論裝置狀態碼 (處理、未處理、錯誤或參考) ,錯誤處理常式隨時都可以傳回這個傳回值。
其他錯誤碼
如果無法復原裝置錯誤,或使用者選擇停止傳輸以回應顯示模式對話方塊,則錯誤處理常式應該傳回裝置狀態碼本身 (請參閱範例一節中的範例) 。 當然,這表示錯誤處理常式會處理裝置狀態碼。
此外,處理裝置狀態碼時,錯誤處理常式必須一致。 也就是說,錯誤處理常式的實例無法選擇在 t0 時處理狀態碼WIA_STATUS_XYZ (或WIA_ERROR_XYZ) ,然後決定不要在時間 t1 處理它。
下列程式碼是無效錯誤處理常式的範例:
STDMETHODIMP
CErrHandler::ReportStatus(
IN LONG lFlags,
IN HWND hwndParent,
IN IWiaItem2 *pWiaItem2,
IN HRESULT hrStatus,
IN LONG lPercentComplete)
{
HRESULT hr = WIA_STATUS_NOT_HANDLED;
if ((hrStatus == WIA_ERROR_PAPER_JAM) && HandleMessageNow())
{
...
}
return hr;
}
移除 HandleMessageNow 常式會使此為有效的錯誤處理常式。