IWiaMiniDrv::d rvAcquireItemData 方法 (wiamindr_lh.h)
WIA 服务调用 IWiaMiniDrv::d rvAcquireItemData 方法,以将数据从设备传输到应用程序。
语法
HRESULT drvAcquireItemData(
BYTE *__MIDL__IWiaMiniDrv0009,
LONG __MIDL__IWiaMiniDrv0010,
PMINIDRV_TRANSFER_CONTEXT __MIDL__IWiaMiniDrv0011,
LONG *__MIDL__IWiaMiniDrv0012
);
参数
__MIDL__IWiaMiniDrv0009
lFlags [in]
保留。
__MIDL__IWiaMiniDrv0010
pWiasContext [in]
指向 WIA 项上下文的指针。
__MIDL__IWiaMiniDrv0011
plDevErrVal [out]
指向将接收此方法的状态代码的内存位置。 如果此方法返回 S_OK,则存储的值将为零。 否则,微型驱动程序特定的错误代码将存储在此参数指向的位置。
__MIDL__IWiaMiniDrv0012
pmdtc [in, out]
指向包含设备传输上下文 的MINIDRV_TRANSFER_CONTEXT 结构。 MINIDRV_TRANSFER_CONTEXT 结构包含与要传输的数据相关的参数。
返回值
成功后,该方法应返回S_OK并清除 plDevErrVal 指向的设备错误值。 如果取消传输,该方法应返回S_FALSE。 如果方法失败,它应返回标准 COM 错误代码,并在 plDevErrVal 指向的内存中填写特定于微型驱动程序的错误代码值。 “ 备注 ”部分包含适用于 ADF 扫描的其他返回值信息。
注解
有两种main类型的传输:基于内存和基于文件。 WIA 服务指示要通过 pmdtc-->tymed 设置执行哪种类型,该设置将TYMED_CALLBACK或TYMED_MULTIPAGE_CALLBACK基于内存的传输,TYMED_FILE或TYMED_MULTIPAGE_FILE文件传输。 有关这些常量的详细信息,请参阅 WIA_IPA_TYMED。
对于基于内存的传输,缓冲区可能已分配,也可能尚未分配,如 pmdtc-->bClassDrvAllocBuf 中的值所示。 WIA 服务最多可以将两个缓冲区传递给微型驱动程序,但通常只传递一个缓冲区。 缓冲区数由 pmdtc-->lNumBuffers 中的值指定。 如果尚未分配缓冲区的内存,微型驱动程序应使用任何常用方式(例如 CoTaskMemAlloc 或 new)来分配它。 如果微型驱动程序分配缓冲区,则它还负责释放缓冲区。
对于文件传输,微型驱动程序应首先将数据写入 WIA 服务对此方法的调用中传递的缓冲区,然后调用 wiasWritePageBufToFile 将缓冲区数据写入所涉及的文件。 微型驱动程序不应尝试使用 pmdtc-->hFile 中指定的文件句柄将数据写入文件。
微型驱动程序应定期通过 pdmtc--pIWiaMiniDrvCallBack 调用 COM 接口点中的 IWiaMiniDrvCallBack::>MiniDrvCallback 方法,以更新传输的状态。 对于基于内存的传输,此函数用于将数据传递回应用程序。 此函数的调用频率留给微型驱动程序,但应在传输期间调用大约十次,或大约每秒调用一次,以更频繁者为准。
WIA 服务提供的其他传输参数包括:
pmdtc-->guidFormatID - 数据格式
pmdtc-->lCompression - 使用的压缩类型
配备 ADF 的扫描仪的潜在问题在于扫描操作期间纸张不足。 实现 IWiaMiniDrv::d rvAcquireItemData 返回的 HRESULT 取决于扫描程序的 WIA_DPS_PAGES 属性的当前设置,以及是否已正确扫描所有页面。 使用以下规则指导你确定在此方法中返回的相应 HRESULT 。
方案 | HRESULT 值 |
---|---|
WIA_DPS_PAGES 属性设置为 0,扫描程序清空了其 ADF,没有错误。 WIA_DPS_PAGES 属性设置为 N (,其中 N > 0) ,并且扫描程序处理了 N 个页面,没有错误。 |
S_OK |
WIA_DPS_PAGES 属性设置为 N,扫描程序处理了至少一页,但在处理所有 N 页之前用完了纸张。 | WIA_STATUS_END_OF_MEDIA |
扫描程序意外检测到多个页面源,已停止扫描,并将 WIA_DPS_DOCUMENT_HANDLING_STATUS 设置为MULTIPLE_FEED。 | WIA_ERROR_MULTI_FEED |
无论WIA_DPS_PAGES 属性的设置如何,扫描程序在第一次扫描时用完纸张。 扫描操作期间出现卡纸或其他错误。 |
其他错误代码 |
要求
要求 | 值 |
---|---|
目标平台 | 桌面 |
标头 | wiamindr_lh.h (包括 Wiamindr.h) |