共用方式為


WIA 錯誤處理常式傳回值

所有錯誤處理常式都必須遵守一些有關其傳回值的規則。

以下是所有有效的傳回值:

S_OK
已成功處理裝置狀態碼。 不會再叫用錯誤處理常式。

如果錯誤狀態碼 (強制回應對話方塊) ,這表示已採取適當的動作來更正錯誤,例如 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 常式會使此為有效的錯誤處理常式。