Condividi tramite


Trasferimento dei dati tra l'applicazione Windows Vista e il driver legacy

Il livello di compatibilità consente a un'applicazione Windows Vista di chiamare IWiaTransfer::D ownload (descritto nella documentazione di Microsoft Windows SDK) in un driver legacy. Il livello di compatibilità deve implementare il codice di trasferimento delle cartelle e le conversioni di formato. Il livello di compatibilità implementa codice speciale per i trasferimenti di feeder per garantire che sia sempre possibile trasferire più pagine da un driver legacy. Un'applicazione Windows Vista deve sempre essere in grado di richiedere più pagine durante un'analisi dall'elemento del feeder, anche con un trasferimento di TYMED_FILE. Il diagramma seguente illustra un driver legacy con un'applicazione Windows Vista.

diagramma che illustra il trasferimento dei dati tra un'applicazione Windows Vista e un driver legacy.

L'oggetto callback legacy all'interno del servizio WIA converte i messaggi di trasferimento legacy e i dati in messaggi di trasferimento di Windows Vista e scrive i dati nel flusso fornito.

Un'applicazione Windows Vista prevede solo TYMED_FILE e TYMED_MULTIPAGE_FILE in modo che il livello di compatibilità sia responsabile della garanzia che TYMED_CALLBACK e TYMED_MULTIPAGE_CALLBACK non siano esposti a un'applicazione Windows Vista da un driver legacy.

Il modo più semplice per implementare questa parte del livello di compatibilità è stato chiamare sempre nel driver legacy con TYMED_FILE e TYMED_MULTIPAGE_FILE set. Lo svantaggio di eseguire questa operazione è che il driver avrebbe sempre dovuto analizzare l'intera immagine, prima che i dati possano essere scritti nel flusso dell'applicazione. Pertanto, il livello di compatibilità usa TYMED_CALLBACK quando un'applicazione Windows Vista richiede un'analisi del formato WiaImgFmt_BMP (la proprietàWIA_IPA_FORMAT impostata su WiaImgFmt_BMP). In questo modo è possibile che il livello di compatibilità scriva la banda posteriore dei dati in base alla banda.

Tuttavia, un driver legacy non supporta WiaImgFmt_BMP, ma WiaImgFmt_MEMORYBMP per TYMED_CALLBACK . Pertanto, l'oggetto callback di conversione deve creare l'intestazione del file BMP e scrivere nuovamente l'intestazione del file nell'applicazione. A volte questo è facile, ad esempio quando l'intestazione di file BMP può essere creata direttamente dall'intestazione di informazioni BMP. Esistono tuttavia casi in cui l'altezza dell'intestazione di info BMP è impostata su 0. In questo caso, il livello di compatibilità WIA deve attendere fino a quando tutti i dati sono stati trasferiti prima di poter scrivere l'intestazione del file BMP e aggiornare l'intestazione delle informazioni BMP.

Il motivo per cui i trasferimenti di TYMED, oltre a TYMED_CALLBACK, vengono preformati da un driver legacy è che i formati a più pagine sono in genere supportati solo da TYMED_MULTIPAGE_FILE e i driver supportano in genere più formati per TYMED_FILE rispetto a TYMED_CALLBACK.

Durante un TYMED_FILE trasferire il livello di compatibilità attende fino al completamento del trasferimento prima di scrivere nuovamente i dati nel flusso dell'applicazione. Questa operazione viene eseguita eseguendo il mapping del file alla memoria e scrivendo tutti i dati nella memoria in una singola richiesta di scrittura.

Durante un trasferimento TYMED_CALLBACK, il livello di compatibilità scrive nuovamente nel flusso dell'applicazione ogni volta che riceve un messaggio di trasferimento IT_MSG_DATA dal driver legacy.

Il livello di compatibilità contiene anche un codice speciale per i trasferimenti FEEDER. Questo codice garantisce che il livello di compatibilità possa trasferire più pagine dall'ADF anche se TYMED non è TYMED_MULTIPAGE_FILE. In questo modo viene eseguita la chiamata al livello di compatibilità nel driver più volte, ogni volta che si richiede una sola pagina. Questa soluzione garantisce che ogni driver legacy possa gestire i trasferimenti di più pagine dal feeder quando richiamato da un'applicazione Windows Vista.

Un driver legacy può inviare messaggi "fuori banda" durante i trasferimenti(ad esempio per l'anteprima). Questi messaggi verranno ignorati perché non rientrano nel modello di trasferimento basato su flusso.

Per altre informazioni sulle costanti TYMED, vedere Informazioni su TYMED.