Panoramica dei trasferimenti di dati del livello di compatibilità WIA
Senza il livello di compatibilità di trasferimento, un driver WIA di Windows Vista avrebbe dovuto implementare sia stili di trasferimento dei dati basati su flusso che TYMED per poter eseguire trasferimenti di dati da applicazioni legacy e Windows Vista. Analogamente, un'applicazione Windows Vista WIA avrebbe dovuto implementare entrambi gli stili di trasferimento (con implementazioni di callback diverse) per poter eseguire trasferimenti di dati dai driver legacy e Windows Vista. Con il livello di compatibilità WIA, il tipo di driver è trasparente per un'applicazione WIA e un driver WIA di Windows Vista non deve gestire alcun codice di trasferimento legacy.
Esistono due casi di trasferimento in cui è necessario un livello di compatibilità, ognuno dei quali può essere ulteriormente suddiviso in due sottocategorie:
Applicazione legacy che trasferisce dati da un driver Windows Vista:
- Trasferimento file: l'applicazione chiama IWiaDataTransfer::idtGetBandedData.
- Trasferimento di callback: l'applicazione chiama IWiaDataTransfer::idtGetData.
Un'applicazione Windows Vista che trasferisce i dati da un driver legacy:
- Trasferimento file: il livello di compatibilità avvia il trasferimento di file con il driver legacy.
- Trasferimento di callback: il livello di compatibilità avvia un trasferimento di callback con il driver legacy.
Il primo passaggio per determinare se usare il livello di compatibilità consiste nel determinare se un driver WIA è un driver Windows Vista o un driver legacy. Il servizio WIA determinerà questo aspetto esaminando il numero di versione restituito da IStiUSD::GetCapabilities. Un driver legacy restituisce STI_VERSION per il numero di versione, mentre un driver di Windows Vista deve restituire STI_VERSION_3. Questo numero di versione verrà esposto al proxy COM WIA (e a un'applicazione WIA) nella proprietà Windows Vista, WIA_DIP_STI_DRIVER_VERSION.
Il passaggio successivo per determinare se usare il livello di compatibilità consiste nel determinare se un'applicazione è un'applicazione Windows Vista WIA o un'applicazione WIA legacy è semplice: se l'applicazione chiama IWiaDataTransfer::idtGetBandedData o IWiaDataTransfer::idtGetData è un'applicazione WIA legacy, se l'applicazione chiama IWiaTransfer::D ownload è un'applicazione Windows Vista WIA.
Con il nuovo modello di trasferimento dei dati basato su flusso, il servizio WIA non distinguerà più tra TYMED_CALLBACK e TYMED_FILE (o TYMED_MULTIPAGE_CALLBACK e TYMED_MULTIPAGE_FILE). Ci saranno invece solo TYMED_FILE e TYMED_MULTIPAGE_FILE. TYMED_MULTIPAGE_FILE è necessario per consentire ai driver di supportare analisi TIFF (o PDF) a più pagine. Per altre informazioni sulle costanti TYMED, vedere Informazioni su TYMED.
Wia non supporterà il formato bitmap di memoria WiaImgFmt_MEMORYBMP nei driver di Windows Vista.
I driver di Windows Vista possono inviare messaggi di aggiornamento per trasferire i dati in bande anziché memorizzare nella cache l'intera immagine del driver durante un trasferimento. Questa forma di trasferimento è utile per trasferire i dati durante le analisi in cui non è immediatamente possibile determinare le dimensioni dell'immagine trasferita, ad esempio un'analisi con uno scanner di avanzamento a scorrimento. Per trasferire i dati dell'immagine in bande, il driver deve chiamare IStream::Seek sul flusso passato in IWiaTransferCallback::GetNextStream.
Per altre informazioni sui trasferimenti basati su flusso e TYMED, vedere Trasferimenti di dati.
Le interfacce IWiaDataTransfer, IWiaTransfer e IStream sono descritte nella documentazione di Microsoft Windows SDK.