Partager via


Compatibilité WIA-TWAIN

Si un appareil peut avoir deux pilotes ou plus, testez soigneusement ces pilotes pour vérifier leur compatibilité les uns avec les autres. Par exemple, si un pilote laisse l’appareil dans un état inutilisable (par exemple, le pilote n’envoie 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 tous deux un instance de cette DLL. Le 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, Poste de travail ou 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 au moyen 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 ne contient 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 ordonner à votre pilote WIA d’actualiser son arborescence d’éléments lorsqu’une image a été ajoutée ou supprimée.

Pour ce faire, appelez CoCreateInstance(CLSID_IWiaDevMgr,...) à partir de votre pilote TWAIN, énumérez tous les appareils et recherchez 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’elle existe, vous saurez qu’il s’agit de votre pilote WIA. Une fois que vous avez l’élément IWiaItem pour votre pilote, envoyez une commande à votre pilote pour reconstruire son arborescence (par exemple, envoyez-lui une commande WIA CMD_SYNCHRONIZE dans un appel à la méthode IWiaItem::D eviceCommand ). CoCreateInstance, IWiaDevMgr et IWiaItem sont décrits dans la documentation Microsoft Windows SDK.

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 à l’aide 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 dans votre pilote WIA est alors libéré et le pilote WIA reconstruit l’arborescence.

Dans les deux cas, vous devez reconstruire votre arborescence afin qu’elle reflète toutes les modifications apportées aux images réelles sur l’appareil photo ou le scanneur. Veillez à ce que chaque fois que vous mettez à jour l’arborescence en ajoutant ou en supprimant un élément de l’arborescence des éléments, vous mettez 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 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 lié à la non-mise à jour automatique du poste de travail et d’autres applications WIA.

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