Vue d’ensemble des transferts de données de la couche de compatibilité WIA
Sans la couche de compatibilité de transfert, un pilote WIA de Windows Vista aurait dû mettre en œuvre à la fois les styles de transfert de données TYMED et basés sur les flux afin de pouvoir effectuer des transferts de données à partir d’applications héritées et de Windows Vista. De même, une application Windows Vista WIA aurait dû implémenter les deux styles de transfert (avec des implémentations de rappel différentes) pour pouvoir effectuer des transferts de données à partir de pilotes hérités et de pilotes Windows Vista. Avec la couche de compatibilité WIA, le type de pilote est transparent pour une application WIA et un pilote WIA de Windows Vista ne doit pas gérer de code de transfert hérité.
Il existe deux cas de transfert où une couche de compatibilité est nécessaire, chacun pouvant être subdivisé en deux sous-catégories :
Application héritée transférant des données à partir d’un pilote Windows Vista :
- Transfert de fichiers : l’application appelle IWiaDataTransfer::idtGetBandedData.
- Transfert de rappel : l’application appelle IWiaDataTransfer::idtGetData.
Application Windows Vista transférant des données à partir d’un pilote hérité :
- Transfert de fichiers : la couche de compatibilité lance le transfert de fichiers avec le pilote hérité.
- Transfert de rappel : la couche de compatibilité lance un transfert de rappel avec le pilote hérité.
La première étape pour déterminer s’il faut utiliser la couche de compatibilité consiste à déterminer si un pilote WIA est un pilote Windows Vista ou un pilote hérité. Le service WIA détermine cela en examinant le numéro de version qu’un pilote renvoie à partir d’IStiUSD ::GetCapabilities. Un pilote hérité renvoie STI_VERSION pour le numéro de version, tandis qu’un pilote Windows Vista doit renvoyer STI_VERSION_3. Ce numéro de version sera présenté au proxy WIA COM (et à une application WIA) dans la propriété Windows Vista, WIA_DIP_STI_DRIVER_VERSION.
L’étape suivante pour déterminer s’il faut utiliser la couche de compatibilité consiste à déterminer si une application WIA de Windows Vista ou une application WIA héritée est simple : si l’application appelle IWiaDataTransfer::idtGetBandedData ou IWiaDataTransfer::idtGetData, il s’agit d’une application WIA héritée. Si l’application appelle IWiaTransfer::Download il s’agit d’une application WIA de Windows Vista.
Avec le nouveau modèle de transfert de données basé sur le flux, le service WIA ne fait plus la distinction entre TYMED_CALLBACK et TYMED_FILE (ou TYMED_MULTIPAGE_CALLBACK et TYMED_MULTIPAGE_FILE). Au lieu de cela, il n’y aura que TYMED_FILE et TYMED_MULTIPAGE_FILE. TYMED_MULTIPAGE_FILE est nécessaire pour permettre aux pilotes de prendre en charge les analyses TIFF multipage (ou PDF). Pour en savoir plus sur les constantes TYMED, consultez Compréhension de TYMED.
WIA ne prend pas en charge le format bitmap de mémoire WiaImgFmt_MEMORYBMP dans les pilotes Windows Vista.
Les pilotes Windows Vista peuvent envoyer des messages de mise à jour pour transférer des données dans des bandes plutôt que de mettre en cache l’image entière pendant un transfert. Cette forme de transfert est utile pour transférer des données lors d’analyses où il n’est pas possible de déterminer immédiatement la taille de l’image transférée, par exemple lors d’une numérisation à l’aide d’un scanner de chargeur à défilement. Pour transférer des données d’image dans des bandes, le pilote doit appeler IStream::Seek sur le flux qui lui est transmis dans IWiaTransferCallback ::GetNextStream.
Pour en savoir plus sur TYMED et les transferts basés sur des flux, consultez Transferts de données.
Les interfaces IWiaDataTransfer, IWiaTransfer et IStream sont abordées dans la documentation du SDK de Microsoft Windows.