Partager via


compatibilité WIA-TWAIN

Si un appareil peut avoir deux pilotes ou plus, testez soigneusement ces pilotes pour la compatibilité entre eux. Par exemple, si un pilote laisse l’appareil dans un état inutilisable (par exemple, le pilote n’envoyant pas le message de session de fermeture dans un protocole), l’autre pilote peut échouer lorsqu’il tente de communiquer avec l’appareil. Cette situation se produit souvent avec des appareils série.

WIA et TWAIN dans la même DLL

Si vous exécutez un pilote WIA et un pilote TWAIN en même temps à partir d’une seule DLL, le service WIA et l’application TWAIN chargent toutes deux une instance de cette DLL. L’instance WIA de la DLL génère l’arborescence d’éléments WIA. Cette arborescence représente les dossiers et les images de votre appareil photo. Toute application qui utilise WIA (par exemple, Mon ordinateur ou l’Assistant Scanner et Caméra) aura une copie de l’arborescence d’éléments dans votre pilote.

Lorsqu’une image est supprimée ou ajoutée par le biais du pilote TWAIN, le pilote WIA n’est pas averti de cette modification. Par conséquent, l’arborescence d’éléments WIA contient des images qui ont été supprimées ou qui ne contiennent pas d’images qui ont été ajoutées. Dans les deux cas, le pilote doit actualiser son arborescence d’éléments. Pour ce faire, le pilote TWAIN doit commander à votre pilote WIA d’actualiser son arborescence d’éléments lorsqu’une image a été ajoutée ou supprimée.

L’une des façons de procéder consiste à appeler CoCreateInstance(CLSID_IWiaDevMgr,...) à partir de votre pilote TWAIN, énumérer tous les appareils et rechercher votre appareil. Une façon d’identifier votre pilote via cette énumération consiste à créer une propriété personnalisée dans votre pilote WIA afin que si le pilote TWAIN interroge cette propriété et qu’il existe, vous savez qu’il s’agit de votre pilote WIA. Une fois que vous avez iWiaItem pour votre pilote, envoyez une commande à votre pilote pour reconstruire son arborescence (par exemple, envoyez-la une commande WIA CMD_SYNCHRONIZE dans un appel à la méthode IWiaItem ::D eviceCommand ). CoCreateInstance, IWiaDevMgr et IWiaItem sont décrits dans la documentation du Kit de développement logiciel (SDK) Microsoft Windows.

Une autre façon d’actualiser l’arborescence d’éléments WIA consiste à créer un événement nommé dans le pilote WIA. Un thread dans votre pilote WIA peut alors attendre que cet événement soit signalé. Chaque fois que vous supprimez ou ajoutez une image par le biais du pilote TWAIN, le pilote TWAIN signale (en appelant SetEvent (décrit dans la documentation du Kit de développement logiciel (SDK) Windows) sur cet événement nommé. Le thread de votre pilote WIA sera alors libéré, et le pilote WIA reconstruira l’arborescence.

De toute façon, vous devez reconstruire votre arborescence afin qu’elle reflète les modifications apportées aux images réelles sur l’appareil photo ou le scanneur. Assurez-vous que chaque fois que vous mettez à jour l’arborescence en ajoutant ou en supprimant un élément de l’arborescence d’éléments, vous devez mettre en file d’attente un événement (par exemple, WIA_EVENT_ITEM_DELETED ou WIA_EVENT_TREE_UPDATED (pour obtenir une description de ces identificateurs d’événements WIA et d’autres identificateurs d’événements WIA, consultez la documentation du Kit de développement logiciel (SDK) Windows). Si vous envoyez un événement lorsque votre arborescence change, cela résout le problème avec Mon ordinateur et d’autres applications WIA qui ne sont pas mises à jour automatiquement.

Note Bien que vos pilotes TWAIN et WIA existent dans la même DLL, WIA et TWAIN ne peuvent pas partager la même interface utilisateur. Chaque pilote doit avoir sa propre interface utilisateur.