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 扫描的其他返回值信息。

言论

有两种主要传输类型:基于内存和基于文件的传输。 WIA 服务指示要通过 pmdtc设置来执行哪种类型 -->tymed,将 TYMED_CALLBACKTYMED_MULTIPAGE_CALLBACK 用于基于内存的传输,以及 TYMED_FILETYMED_MULTIPAGE_FILE 进行文件传输。 有关这些常量的详细信息,请参阅 WIA_IPA_TYMED

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

  • 对于文件传输,微型驱动程序应首先将数据写入 WIA 服务调用此方法中传递的缓冲区,然后调用 wiasWritePageBufToFile 将缓冲区数据写入所涉及的文件。 微型驱动程序不应尝试使用在 pmdtc 中指定的文件句柄 ->hFile 将数据写入文件。

微型驱动程序应定期调用 COM 接口点中的 IWiaMiniDrvCallBack::MiniDrvCallback 方法,方法是 pdmtc-->pIWiaMiniDrvCallBack 更新传输状态。 对于基于内存的传输,此函数用于将数据传回应用程序。 应调用此函数的频率留给微型驱动程序,但应在传输期间调用大约十次,或大约每秒调用一次,以更频繁的频率为准。

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