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_CALLBACKTYMED_MULTIPAGE_CALLBACK基于内存的传输,TYMED_FILE或TYMED_MULTIPAGE_FILE文件传输。 有关这些常量的详细信息,请参阅 WIA_IPA_TYMED

  • 对于基于内存的传输,缓冲区可能已分配,也可能尚未分配,如 pmdtc-->bClassDrvAllocBuf 中的值所示。 WIA 服务最多可以将两个缓冲区传递给微型驱动程序,但通常只传递一个缓冲区。 缓冲区数由 pmdtc-->lNumBuffers 中的值指定。 如果尚未分配缓冲区的内存,微型驱动程序应使用任何常用方式(例如 CoTaskMemAllocnew)来分配它。 如果微型驱动程序分配缓冲区,则它还负责释放缓冲区。

  • 对于文件传输,微型驱动程序应首先将数据写入 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)

另请参阅

IWiaMiniDrv

IWiaMiniDrv::d rvGetDeviceErrorStr

MINIDRV_TRANSFER_CONTEXT

wiasGetImageInformation