WIA 兼容性层数据传输概述

如果没有传输兼容性层,Windows Vista WIA 驱动程序就必须同时实现 TYMED 和基于流的数据传输样式,才能从旧版和 Windows Vista 应用程序执行数据传输。 同样,Windows Vista WIA 应用程序必须实现两种类型的传输(采用不同的回调实现),才能从旧版和 Windows Vista 驱动程序执行数据传输。 通过使用 WIA 兼容性层,驱动程序的类型对 WIA 应用程序来说是透明的,Windows Vista WIA 驱动程序无需处理任何旧版传输代码。

两种传输情况需要兼容性层,而每种情况又可细分为两个子类别:

  1. 从 Windows Vista 驱动程序传输数据的旧版应用程序:

    1. 文件传输:应用程序调用 IWiaDataTransfer::idtGetBandedData
    2. 回调传输:应用程序调用 IWiaDataTransfer::idtGetData
  2. 从旧版驱动程序传输数据的 Windows Vista 应用程序:

    1. 文件传输:兼容性层使用旧驱动程序启动文件传输。
    2. 回调传输:兼容性层使用旧版驱动程序来启动回调传输。

确定是否使用兼容性层的第一步是确定 WIA 驱动程序是 Windows Vista 驱动程序还是旧版驱动程序。 WIA 服务将通过查看驱动程序从 IStiUSD::GetCapabilities 返回的版本号来确定这一点。 旧版驱动程序的版本号返回 STI_VERSION,而 Windows Vista 驱动程序必须返回 STI_VERSION_3。 此版本号将通过 Windows Vista 属性 WIA_DIP_STI_DRIVER_VERSION 显示给 WIA COM 代理(和 WIA 应用程序)。

确定是否使用兼容性层的下一步很简单:如果应用程序调用 IWiaDataTransfer::idtGetBandedDataIWiaDataTransfer::idtGetData 则是传统 WIA 应用程序,如果应用程序调用 IWiaTransfer::Download 则是 Windows Vista WIA 应用程序。

采用新的基于流的数据传输模式后,WIA 服务将不再区分 TYMED_CALLBACK 和 TYMED_FILE(或 TYMED_MULTIPAGE_CALLBACK 和 TYMED_MULTIPAGE_FILE)。 取而代之的是 TYMED_FILE 和 TYMED_MULTIPAGE_FILE。 需要使用 TYMED_MULTIPAGE_FILE,以便驱动程序支持多页 TIFF(或 PDF)扫描。 有关 TYMED 常量的详细信息,请参阅了解 TYMED

在 Windows Vista 驱动程序中,WIA 将不支持内存位图格式 WiaImgFmt_MEMORYBMP

Windows Vista 驱动程序可以发送更新信息,分段传输数据,而不是在传输过程中让驱动程序缓存整个映像。 这种传输方式适用于在扫描过程中传输数据,因为在扫描过程中无法立即确定所传输图像的大小,例如使用滚动进纸扫描仪进行扫描。 为了分段传输图像数据,驱动程序必须在 IWiaTransferCallback::GetNextStream 中传递给它的数据流上调用 IStream::Seek

有关 TYMED 和基于流的传输的更多信息,请参阅数据传输

Microsoft Windows SDK 文档中讨论了 IWiaDataTransferIWiaTransferIStream 接口。