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 例程将使此成为有效的错误处理程序。