Condividi tramite


Compatibilità WIA-TWAIN

Se un dispositivo può avere due o più driver, testare questi driver in modo accurato per la compatibilità tra loro. Ad esempio, se un driver lascia il dispositivo in uno stato inutilizzabile (ad esempio il driver che non invia il messaggio di sessione di chiusura in un protocollo), l'altro driver potrebbe non riuscire quando tenta di comunicare con il dispositivo. Questa situazione si verifica spesso con i dispositivi seriali.

WIA e TWAIN nella stessa DLL

Se si esegue un driver WIA e un driver TWAIN contemporaneamente da una singola DLL, il servizio WIA e l'applicazione TWAIN caricheranno entrambe un'istanza di questa DLL. L'istanza WIA della DLL creerà l'albero degli elementi WIA. Questo albero rappresenta le cartelle e le immagini nella fotocamera. Qualsiasi applicazione che usa WIA (ad esempio La creazione guidata computer o scanner e fotocamera) avrà una copia dell'albero degli elementi nel driver.

Quando un'immagine viene eliminata o aggiunta tramite il driver TWAIN, il driver WIA non riceve una notifica di questa modifica. Di conseguenza, l'albero degli elementi WIA conterrà immagini eliminate o non conterrà immagini aggiunte. In entrambi i casi, il driver deve aggiornare l'albero degli elementi. A tale scopo, il driver TWAIN deve ordinare al driver WIA di aggiornare l'albero degli elementi quando un'immagine è stata aggiunta o eliminata.

Un modo per eseguire questa operazione consiste nel chiamare CoCreateInstance(CLSID_IWiaDevMgr,...) dal driver TWAIN, enumerare tutti i dispositivi e cercare il dispositivo. Un modo per identificare il driver tramite questa enumerazione consiste nel creare una proprietà personalizzata nel driver WIA in modo che se il driver TWAIN esegue query per questa proprietà ed esiste, si sa che è il driver WIA. Dopo aver ottenuto IWiaItem per il driver, inviare un comando al driver per ricompilare l'albero, ad esempio inviare un comando WIA CMD_SYNCHRONIZE in una chiamata al metodo IWiaItem::D eviceCommand . CoCreateInstance, IWiaDevMgr e IWiaItem sono descritti nella documentazione di Microsoft Windows SDK.

Un altro modo per aggiornare l'albero degli elementi WIA consiste nel creare un evento denominato nel driver WIA. Un thread nel driver WIA può quindi attendere che questo evento venga segnalato. Ogni volta che si elimina o si aggiunge un'immagine tramite il driver TWAIN, il driver TWAIN (chiamando SetEvent (descritto nella documentazione di Windows SDK) in questo evento denominato. Il thread nel driver WIA verrà quindi rilasciato e il driver WIA ricompila l'albero.

In entrambi i casi, è necessario ricompilare l'albero in modo che rifletta le modifiche apportate alle immagini effettive nella fotocamera o nello scanner. Assicurarsi che ogni volta che si aggiorna l'albero aggiungendo o eliminando un elemento dall'albero degli elementi, si accoda un evento (ad esempio, WIA_EVENT_ITEM_DELETED o WIA_EVENT_TREE_UPDATED (per una descrizione di questi e altri identificatori di evento WIA, vedere la documentazione di Windows SDK). Se si invia correttamente un evento quando l'albero cambia, questo risolverà il problema con Il computer personale e altre applicazioni WIA non aggiornate automaticamente.

Nota Anche se i driver TWAIN e WIA possono esistere nella stessa DLL, i driver WIA e TWAIN non possono condividere la stessa interfaccia utente. Ogni driver deve avere una propria interfaccia utente.