Freigeben über


WIA-TWAIN-Kompatibilität

Wenn ein Gerät über zwei oder mehr Treiber verfügen kann, testen Sie diese Treiber gründlich auf Kompatibilität miteinander. Wenn beispielsweise ein Treiber das Gerät in einem unbrauchbaren Zustand belässt (z. B. wenn der Treiber die Meldung zum Schließen der Sitzung in einem Protokoll nicht sendet), schlägt der andere Treiber möglicherweise fehl, wenn er versucht, mit dem Gerät zu kommunizieren. Diese Situation tritt häufig bei seriellen Geräten auf.

WIA und TWAIN in derselben DLL

Wenn Sie einen WIA-Treiber und einen TWAIN-Treiber gleichzeitig aus einer einzelnen DLL ausführen, laden der WIA-Dienst und die TWAIN-Anwendung jeweils eine instance dieser DLL. Die WIA-instance der DLL erstellt die WIA-Elementstruktur. Diese Struktur stellt die Ordner und Bilder auf Ihrer Kamera dar. Jede Anwendung, die WIA verwendet (z. B. Mein Computer oder Scanner- und Kamera-Assistent), verfügt über eine Kopie der Elementstruktur in Ihrem Treiber.

Wenn ein Image mithilfe des TWAIN-Treibers gelöscht oder hinzugefügt wird, wird der WIA-Treiber nicht über diese Änderung benachrichtigt. Infolgedessen enthält die WIA-Elementstruktur entweder Bilder, die gelöscht wurden, oder keine hinzugefügten Bilder. In beiden Fällen muss der Treiber seine Elementstruktur aktualisieren. Dazu muss der TWAIN-Treiber Ihren WIA-Treiber anordnen, seine Elementstruktur zu aktualisieren, wenn ein Image hinzugefügt oder gelöscht wurde.

Dazu rufen Sie coCreateInstance(CLSID_IWiaDevMgr,...) von Ihrem TWAIN-Treiber auf, führen Sie alle Geräte auf und suchen Sie nach Ihrem Gerät. Eine Möglichkeit, Ihren Treiber über diese Enumeration zu identifizieren, besteht darin, eine benutzerdefinierte Eigenschaft in Ihrem WIA-Treiber zu erstellen, damit Sie wissen, dass es sich um Ihren WIA-Treiber handelt, wenn der TWAIN-Treiber diese Eigenschaft abfragen und sie vorhanden ist. Nachdem Sie über das IWiaItem für Ihren Treiber verfügen, senden Sie einen Befehl an Ihren Treiber, um seine Struktur neu zu erstellen (z. B. senden Sie ihm einen WIA-CMD_SYNCHRONIZE-Befehl in einem Aufruf der IWiaItem::D eviceCommand-Methode ). CoCreateInstance, IWiaDevMgr und IWiaItem werden in der Microsoft Windows SDK-Dokumentation beschrieben.

Eine weitere Möglichkeit zum Aktualisieren der WIA-Elementstruktur besteht darin, ein benanntes Ereignis im WIA-Treiber zu erstellen. Ein Thread in Ihrem WIA-Treiber kann dann warten, bis dieses Ereignis signalisiert wird. Wenn Sie ein Image mithilfe des TWAIN-Treibers löschen oder hinzufügen, signalisiert der TWAIN-Treiber (durch Aufrufen von SetEvent (in der Windows SDK-Dokumentation beschrieben)) für dieses benannte Ereignis. Der Thread in Ihrem WIA-Treiber wird dann freigegeben, und der WIA-Treiber erstellt die Struktur neu.

Auf jeden Fall sollten Sie Ihre Struktur so neu erstellen, dass sie alle Änderungen an den tatsächlichen Bildern auf der Kamera oder dem Scanner widerspiegelt. Stellen Sie beim Aktualisieren der Struktur durch Hinzufügen oder Löschen eines Elements aus der Elementstruktur sicher, dass Sie ein Ereignis in die Warteschlange stellen (z. B. WIA_EVENT_ITEM_DELETED oder WIA_EVENT_TREE_UPDATED (eine Beschreibung dieser und anderer WIA-Ereignisbezeichner finden Sie in der Windows SDK-Dokumentation).) Wenn Sie erfolgreich ein Ereignis senden, wenn sich Die Struktur ändert, wird das Problem mit "Arbeitsplatz" und anderen WIA-Anwendungen behoben, die nicht automatisch aktualisiert werden.

Hinweis Während Ihre TWAIN- und WIA-Treiber möglicherweise in derselben DLL vorhanden sind, können WIA- und TWAIN-Treiber nicht dieselbe Benutzeroberfläche verwenden. Jeder Treiber muss über eine eigene Benutzeroberfläche verfügen.